こんにちは、なかぜんです。
VBAで開発していると、「ちゃんと動いてるか不安…」と思ったことはありませんか? 特に複雑なロジックや日付処理、集計処理があると、目視チェックや手作業では限界を感じるものです。
今回は、Access VBAでも手軽にできる「疑似ユニットテスト」の書き方をご紹介します。「これなら実務でも使える!」と思っていただけるよう、実例たっぷりで解説していきますね。
VBAで「テストコード」を書くという発想
VBAには標準でユニットテストの仕組みはありませんが、工夫次第で自作テスト関数を呼び出して結果を評価することはできます。
たとえば、計算結果や返り値を確認するだけでも十分な効果があります。コード修正後の確認や、仕様変更による影響調査にも活用できますよ。
テストコードを書くメリット
- ロジックの動作確認が簡単になる
- 保守や改修の安心感が増す
- ミスが早期に見つかる
基本のテストコード構成
以下が基本的なテストコードのイメージです。
' ▼ テスト対象関数(例:合計計算)
Public Function CalcTotal(val1 As Long, val2 As Long) As Long
CalcTotal = val1 + val2
End Function
' ▼ テスト関数
Public Sub Test_CalcTotal()
Dim result As Long
result = CalcTotal(3, 5)
If result = 8 Then
Debug.Print "Test_CalcTotal: OK"
Else
Debug.Print "Test_CalcTotal: NG(結果:" & result & ")"
End If
End Sub
Test_CalcTotalを手動または一括呼び出しすることで、検証ができます。
ポイント解説
- テスト関数は「Test_」で始めると管理しやすい
- Debug.Printで結果を即確認可能(イミディエイトウィンドウ)
- 想定値との比較で、OK/NGの判断を明示
複数テストを一括で流す構造
個別のテスト関数を1つずつ実行するのは手間ですよね。以下のように一括実行モジュールを作っておくと便利です。
' ▼ 全テスト実行マクロ
Public Sub RunAllTests()
Debug.Print "=== テスト開始 ==="
Test_CalcTotal
' 他のテストをここに追加
Test_Example1
Test_Example2
Debug.Print "=== テスト終了 ==="
End Sub
このRunAllTestsをボタンに割り当てれば、1クリックでテスト一式が実行できます。
注意点とよくあるミス
- 関数名のスペルミスに注意(エラーで止まる)
- 条件分岐の誤判定(=を==と間違えるなど)
- Test_関数を呼び忘れるとスルーされてしまう
また、AccessではフォームイベントやUI操作が必要な処理はテストしにくいので、ロジック部とUI部を分離する設計が有効です。
応用ポイント:ログ出力やエラー対応も強化
Debug.Printの代わりに、ログファイルに出力することで記録も可能です。
' ▼ ログ出力例
Public Sub LogResult(msg As String)
Dim f As Integer
f = FreeFile
Open CurrentProject.Path & "\TestLog.txt" For Append As #f
Print #f, Now & " - " & msg
Close #f
End Sub
さらに、テスト関数にOn Error構文を加えることで、実行時エラーもキャッチできます。
Public Sub Test_SafeExample()
On Error GoTo ErrHandler
' テスト処理
Debug.Print "正常に実行されました"
Exit Sub
ErrHandler:
Debug.Print "エラー発生:" & Err.Description
End Sub
まとめ:テストで業務ロジックに安心を
今回は、Access VBAで「テストコード(疑似ユニットテスト)」を書く方法をご紹介しました。
ポイントをおさらいすると…
- VBAでもテスト関数は簡単に書ける
- ロジック部を検証するだけでも効果大
- 一括実行やログ出力で実用性アップ
業務ロジックの安定運用には、こうした検証コードがとても役立ちます。小さな仕組みでも、自分なりの「テスト文化」を取り入れていけるといいですね。
「これ、さっそく取り入れてみようかな!」と思ってもらえたら、うれしいです。ではまた、なかぜんでした!
