VBAのデバッグでウォッチ式を使う
株式会社テイクーワンのK.Oです。
VBAのデバッグでウォッチ式の使い方についてまとめます。
まずはじめに、ステップ実行について(Visual Basicリファレンスより)
VBEの[デバッグ]メニューから選択します。
- ステップイン:F8
- ステップオーバー:Shift+F8
- ステップアウト:Ctrl+Shift+F8
ステップイン
コードを1ステップずつ実行します。黄色のラインが現在の実行箇所です。
「ステップイン」をクリックすると、現在の実行箇所を実行します。
プロシージャを呼び出すステートメントを実行すると、呼び出したプロシージャの最初のステートメントが次に実行されます。
![]()
⇒「ステップイン」
![]()
ステップオーバー
ステップインとほとんど同じですが、現在のステートメントからプロシージャを呼び出す場合に処理が異なります。
「ステップオーバー」では、プロシージャを1つの単位として実行してから、現在のプロシージャの次のステートメントに実行を移します。
したがって、現在のステートメントが別のプロシージャを呼び出すかどうかにかかわらず、現在のプロシージャの次のステートメントが次に表示されるステートメントになります。中断モードのみで使用できます。マクロの実行が一時停止し、次に実行する行が黄色で表示されている状態を「中断モード」といいます。
![]()
⇒「ステップオーバー」
![]()
ステップアウト
現在のプロシージャの残りの処理を実行し、呼び出し元に戻って、呼び出した行の次のステートメントに進みます。中断モードのみで使用できます。
![]()
⇒「ステップアウト」
![]()
次に、ウォッチ式について
デバッグ中、プロシージャ内の変数や式の状態を観察することができます。
ウォッチ式の追加で追加した式とその値をウォッチウィンドウに表示します。
ウォッチ式の追加はVBEの[デバッグ]メニューから[ウォッチ式の追加]を選択します。
「式」に監視したい変数や条件式を入力し、「対象」でプロシージャを確認します。
最後に「ウォッチの種類」を選択して「OK」をクリックします。

![]()
ウォッチの種類「式がTrueのときに中断」が便利
この例はセルA1~A15に入力されている値を10で割り、その余りをB1~B15に出力するプログラムです。
けれど、こんなことが・・・
セルA11に文字列が入力されていますが、数値かどうかを判定する処理を行っていないため、
エラーとなっています。
![]()

大量データだと原因の特定が大変
ひたすら「ステップイン」でも原因までたどり着くことはできますが、大量データだと時間がかかって大変です。
そんな時は「式がTrueのときに中断」を使います。
式がTrueとなる場合に、実行が中断されます。
今回は説明のため、不具合が発生する11行目で中断するように、「式」にはi=11を指定します。

⇒実行すると・・・
![]()
⇒この状態から「ステップイン」していくと
![]()
⇒「ステップイン」
![]()
おわりに
今回はウォッチ式のことを紹介しました。
不具合の原因調査や変数の値の確認を効率的に行えるので、ぜひ使ってみてください。
