初心者でも使いやすい「ウォッチ式」は、指定した変数や式の値をリアルタイムで見ながらデバッグできる仕組みです。値が変わった瞬間に止める設定も可能で、「いつおかしくなったか」を特定するのに役立ちます。
ウォッチウィンドウの表示
- 表示手順:
- 表示 → ウォッチウィンドウ を選ぶと、コードウィンドウ下部にウォッチウィンドウが表示されます。
- ポイント: 初期状態では非表示のことがあるため、デバッグ開始前に開いておくとスムーズです。
ウォッチウィンドウは値の監視だけでなく、条件を満たしたときの中断(ブレーク)も設定できます。
基本の使い方(変数を登録して監視)
- 追加方法:
- コード上で監視したい変数や式を選択して右クリック → ウォッチ式の追加。
- もしくはウォッチウィンドウ内で右クリック → 追加 を選ぶ。
- 対象の指定:
- 式: 例「i」「s」「Square(i)」など。
- コンテキスト: どのモジュール・プロシージャで評価するかを指定。通常は「現在のプロシージャ」でOK。
- 確認方法:
- ステップ実行中(F8やShift+F8)に、ウォッチウィンドウの値が更新されていきます。
右クリックからの「ウォッチ式の追加」は、選択中の変数・式がそのまま登録されるので初心者に便利です。
実例で理解する(合計と二乗の関数)
Sub Main()
Dim total As Long
total = SumUp(3)
Debug.Print "Total=" & total
End Sub
Function SumUp(n As Long) As Long
Dim i As Long, s As Long
For i = 1 To n
s = s + Square(i) ' ← ここにブレークポイントを置くと観察しやすい
Next i
SumUp = s
End Function
Function Square(x As Long) As Long
Square = x * x
End Function
VB- 登録してみるウォッチ式:
- i: ループの現在インデックス。
- s: 合計の累積値。
- Square(i): 呼び出し前に式の評価結果を確認できる。
- 観察のポイント:
iが 1 → 2 → 3 と増えるにつれ、sが 1 → 5 → 14 と更新されていく様子がウォッチで一目で分かります。
式そのもの(例:Square(i))も登録可能で、呼び出し直前の評価値が見えるため「想定外の引数」が紛れ込んだ瞬間を見つけやすいです。
変化で中断する設定(いつ値が変わったかで止める)
- やり方:
- ウォッチ式の追加ダイアログで「ウォッチの種類」を 式の内容が変化したときに中断 に設定すると、値が変わる瞬間で自動的にブレークします。
- 使いどころ:
- どこかで勝手に変わる変数(例:グローバル変数、ActiveSheetの変更など)を追跡するのに有効です。
- 注意点:
- 変化が頻繁だと停止が多くなるので、対象を絞るか一時的に無効化しながら進めます。
例題として「ActiveSheet.Name」をウォッチ登録し、変化中断にすると、シートが切り替わった直後の行で止まり、原因コードを特定できます。
条件で中断する設定(特定条件を満たしたら止める)
- やり方:
- 「ウォッチの種類」を 式が真のときに中断 にし、条件式(例:
i = 10、s > 1000)をウォッチに登録します。
- 「ウォッチの種類」を 式が真のときに中断 にし、条件式(例:
- 効果:
- ループで何百回も止まるのを避け、問題のシナリオだけで停止できるので効率的です。
- 実用例:
- SumUpの
i = 3のときだけ停止にすると、最終加算直前・直後のsをピンポイントで確認できます。
- SumUpの
よくあるつまずきと対策
- 止まらない/値が見えない:
- ウォッチの「コンテキスト」が異なると評価できないことがあります。現在のプロシージャか対象モジュールに合わせて設定し直します。
- 停止しすぎる:
- 「変化で中断」設定は頻繁な更新で煩雑になりがち。必要箇所だけ有効化する、条件付きに切り替えると快適です。
- ビルトインの内部には入れない:
- Left、Range.Value などの内部実装はステップイン不可。ウォッチで前後の値変化を観察する方針に切り替えます。
まとめ
- ウォッチ式の追加で変数・式の値をリアルタイム監視し、変化や条件で自動中断も設定できる。
- コンテキスト設定を正しく行い、必要に応じて「変化で中断」「真で中断」を使い分けると、原因箇所に最短で到達できる。

