マクロを作っていて「ちゃんと動いてるはずなのに、なぜか結果が変…」という経験、ありませんか?
Excel VBAはすぐに動かせる便利さがありますが、その反面「どこが間違ってるのか分かりにくい」という難しさもあります。
そんなとき役に立つのが、「単体テスト的な考え方」です。
もともとはプログラミングの現場で使われる用語ですが、VBAでも十分応用できます。
今回は、実践できる単体テストの基礎と、そのVBAへの取り入れ方をわかりやすくご紹介します。
単体テストとは?ざっくり理解しておこう
単体テスト(ユニットテスト)とは、プログラムの“部品”ごとに正しく動くか確認するテストのことです。
マクロ全体を一気に動かして「うまくいった/いかなかった」ではなく、小さな処理単位ごとに「この部分は正しい」と確かめながら組み上げていく考え方です。
VBAでも活用できる理由
- VBAも、複数のプロシージャやFunctionで構成されているため、テスト単位を作りやすい
- Excelという見える結果(シートやセル)があるから、判定もしやすい
- 「いきなり本番」ではなく、事前に“確認マクロ”を作るだけで安心感が違う
たとえば、次のような集計処理を行うマクロを考えてみます。
集計関数の例(対象:Function)
Function AddTax(price As Double) As Double
AddTax = price * 1.1
End Function
これは価格に対して10%の消費税を加算して返す関数です。
この小さな関数単位で「正しく計算できるか?」を確かめるのが、単体テストの考え方です。
VBAで単体テスト的な仕組みを作る方法
では、実際にVBAでどうやって単体テストの考え方を取り入れていくのかを見ていきましょう。
1. テスト用のプロシージャを用意する
まずは、テスト専用のSubプロシージャを作ります。
Sub Test_AddTax()
Dim result As Double
result = AddTax(1000)
If result = 1100 Then
MsgBox "AddTaxは正常に動作しています。"
Else
MsgBox "エラー:AddTaxの結果が想定外です → " & result
End If
End Sub
このように、自分で条件と期待する値を用意して比較するだけでも、十分なテストになります。
2. イミディエイトウィンドウを使ってログ出力
テスト結果を毎回メッセージボックスで表示すると手間なので、Debug.Print を使ってログを出す方法も便利です。
Sub Test_AddTax()
Dim result As Double
result = AddTax(200)
If result = 220 Then
Debug.Print "テスト成功"
Else
Debug.Print "失敗:結果は" & result
End If
End Sub
テストの実行後、VBEのイミディエイトウィンドウ(Ctrl + G)で結果を確認できます。
3. 複数のテストパターンを用意する
たとえば次のように、さまざまな引数を試しておくと、様々な動作確認もできて安心です。
次のケースでは100や、0の場合、負の場合のとき、大きな値のときの処理の結果を見ることで、それぞれのパターンでも正しく計算されることをテストしています。
Sub Test_AddTax_All()
Debug.Print "100 → "; AddTax(100)
Debug.Print "0 → "; AddTax(0)
Debug.Print "-100 → "; AddTax(-100)
Debug.Print "10000 → "; AddTax(10000)
End Sub
実装するメリットと実務での使い方
VBAに単体テスト的な考え方を取り入れると、次のようなメリットがあります。
メリット
- マクロが正しく動いているという安心感が得られる
- 不具合が起きても原因が切り分けやすくなる
- 処理を変更したときに「ちゃんと動くか?」をすぐ確認できる
- 同じ関数を他のマクロでも使い回しやすくなる
実務でのポイント
- マクロの処理をできるだけ「小分け」にしてFunctionにまとめておく
- 関数ごとにテスト用Subを1つずつ用意するのが理想
- 本番前にテストプロシージャだけ一通り実行すれば、安心して運用できる
まとめ:マクロも“確認しながら作る”
Excel VBAは、「動けばOK」という使い方でも十分便利です。
でも、ちょっとずつ規模が大きくなったり、他の人も使うようになったりすると、「ちゃんと確認してから使いたい」というニーズが出てきます。
そのときに役立つのが、今回紹介した単体テストの考え方です。
「本当にこの処理、ちゃんと動くのかな?」
そう思ったら、マクロ全体を実行するのではなく、小さく分けて、1つずつ確かめる。
その習慣が、あなたのVBAスキルを確実にレベルアップさせてくれます。
