はじめに
VBAを書いていて、こんな経験はありませんか?
- 結果が想定と違う
- エラーは出ないのに値がおかしい
- どこで処理がズレたかわからない
- MsgBox を大量に出して確認している
実務では、バグを早く見つけられる人ほど強いです。
そのときにまず使いたいのが、VBA標準のデバッグ機能である
- Debug.Print
- Stop
この2つです。
今回は、現場でもすぐ使える デバッグ効率を上げる基本テクニック を紹介します。
目次
- なぜデバッグに時間がかかるのか
- Debug.Print の使い方
- Stop の使い方
- 実務で使える調査パターン3選
- デバッグが速い人の考え方
- まとめ
1. なぜデバッグに時間がかかるのか
VBA初心者の頃によくあるのが、値確認のために MsgBox を連発する方法です。
MsgBox x
MsgBox y
MsgBox z
これでも確認はできますが、問題があります。
- 毎回OKを押す必要がある
- 連続処理が止まる
- ループ処理では使いにくい
- 大量データでは非効率
つまり、確認方法が遅い = デバッグ全体が遅い ということです。
2. Debug.Print の使い方
Debug.Print は、イミディエイトウィンドウへ値を出力する命令です。
Sub Sample()
Dim i As Long
For i = 1 To 5
Debug.Print i
Next i
End Sub
実行結果:
1
2
3
4
5
イミディエイトウィンドウの表示方法
VBE(Visual Basic Editor)で以下を押します。
Ctrl + G
すると下部にイミディエイトウィンドウが表示されます。
メリット
- 処理を止めずに確認できる
- 大量データでも使いやすい
- ループ内確認に強い
- 複数変数を同時に見られる
複数値を出力する例
Debug.Print i, productName, amount
結果イメージ:
1 PC 50000
2 Mouse 3000
3 Desk 20000
3. Stop の使い方
Stop は、処理をその場で一時停止する命令です。
Sub Sample()
Dim x As Long
x = 10
Stop
x = x + 5
End Sub
Stop に到達すると処理が止まり、その時点の変数状態を確認できます。
Stopでできること
- 変数の値確認
- ステップ実行(F8)
- 処理の流れ確認
- 値を書き換えてテスト
こんな時に便利
- 途中から値がおかしくなる
- 特定行数で止めたい
- 分岐前後を確認したい
4. 実務で使える調査パターン3選
① 何行目で値がおかしいか調べる
Dim i As Long
For i = 2 To lastRow
Debug.Print i, Cells(i, 1).Value
Next i
これで、
- 行番号
- セル値
を追えるため、異常データの場所を特定しやすくなります。
② 条件分岐に入っているか確認する
If amount > 100000 Then
Debug.Print "高額案件", amount
End If
条件が想定通り動いているか確認できます。
③ 500行目で止める
If i = 500 Then Stop
大量データ処理中でも、確認したい地点で止められます。
5. デバッグが速い人の考え方
デバッグが速い人は、感覚で探しません。
以下の順番で絞り込みます。
- どこまでは正常か
- どこから異常か
- その直前の値は何か
- 条件分岐は正しいか
つまり、推測ではなく、事実で追う
これが重要です。
6. 実務でさらにおすすめの使い方
Debug.Print + 見やすい文字列
Debug.Print "行番号:" & i & " 金額:" & amount
結果:
行番号:15 金額:98000
見やすさがかなり上がります。
作業後は削除またはコメントアウト
デバッグコードは本番前に整理しましょう。
' Debug.Print amount
まとめ
VBAのデバッグ効率を上げたいなら、まずこの2つです。
- Debug.Print → 値確認
- Stop → 一時停止確認
難しい技術より、こうした基本操作の積み重ねが最も効きます。