VBAのデバッグで「変数がいつ・どこで変わったか」を追うなら、ウォッチウィンドウが最も効率的です。コードに Debug.Print を書き足さなくても、変数や式の値をリアルタイムで監視できるため、ループや条件分岐の中のバグを素早く特定できます。
この記事では、次の内容を順番に解説します。
- ウォッチウィンドウの開き方と基本操作
- ウォッチ式の追加・削除・編集の手順
- ステップ実行(F8)と組み合わせた使い方
- 条件付きウォッチで特定の値になったときだけ止める方法
- Debug.Print・ローカルウィンドウとの使い分け
ウォッチウィンドウを開くには?
VBE(Visual Basic Editor)のメニューから「表示」→「ウォッチウィンドウ」を選ぶと、画面下部にウォッチ専用のエリアが表示されます。一度開いておけば、次回VBAを開いたときも同じ位置に表示されます。
ウォッチウィンドウには次の4つの項目が表示されます。最初は「値」だけ注目すればOKです。
| 列名 | 内容 |
|---|---|
| 式 | 監視している変数名(例:i) |
| 値 | 現在の値(マクロ実行中にどんどん変わります) |
| 型 | 変数の種類(数字ならLong、文字ならStringなど) |
| コンテキスト | その変数が「どこで使われているか」という情報 |
ウォッチ式を追加するには?
監視したい変数をウォッチウィンドウに登録することを「ウォッチ式の追加」と言います。一番簡単な方法は、右クリックを使う方法です。
- コード上で監視したい変数名(例:
total)をマウスで選択して青く反転させる - そのまま右クリックして「ウォッチ式の追加」を選ぶ
- 小さな画面が出るので、そのまま「OK」を押す
これで、ウォッチウィンドウにその変数が登録されます。あとはマクロを動かすだけで、その中身がリアルタイムで表示されるようになります。
F8キー(ステップ実行)で変数の変化を追う
ウォッチウィンドウは、マクロを一時停止している状態で真価を発揮します。F8キーを1回押すごとに1行ずつ進む「ステップ実行」と組み合わせるのが基本の形です。
Sub CalcTotal()
Dim i As Long
Dim total As Double
'★ここでtotalとiをウォッチに追加しておく
For i = 2 To 10
total = total + Cells(i, 2).Value
Next i
MsgBox "合計は" & total & "です"
End Sub
このコードのどこかにカーソルを置いて、F8キーをポン、ポンと押してみてください。黄色い矢印が1行ずつ進むたびに、ウォッチウィンドウの i や total の値が変化していくのが分かります。「ここで計算がおかしくなった!」という瞬間がひと目で特定できます。
特定の条件になったときだけ止める(条件付きウォッチ)
「1000回回るループの、900回目だけ確認したい」という時に、F8を900回押すのは不可能です。そんな時は「条件付きウォッチ」を使います。
- 右クリックで「ウォッチ式の追加」を開く
- 「式」の欄に、
i = 900のように条件式を書く(※ここがポイント!) - ウォッチの種類を「値が True のとき中断」に変えてOKを押す
この状態でマクロを実行(F5キー)すると、i が900になった瞬間に自動でマクロが一時停止します。これを知っているだけで、デバッグの時間は劇的に短縮されます。
他のツール(ローカル・Debug.Print)との使い分け
VBAには他にもデバッグツールがあります。初心者のうちは以下のように使い分けるのがおすすめです。
| ツール | 特徴 | 使いどころ |
|---|---|---|
| ウォッチウィンドウ | 選んだ変数だけをじっくり追える | 特定の変数がいつ変わるか知りたい時 |
| ローカルウィンドウ | 全部の変数を自動で表示してくれる | とりあえず全体の状況を見たい時 |
| Debug.Print | イミディエイトウィンドウに履歴を残す | 何回も変わる値を後でまとめて見たい時 |
まとめ
- ウォッチウィンドウは、特定の変数が今どんな値かを監視する窓
- 右クリック → 「ウォッチ式の追加」 が一番簡単
- F8キー(ステップ実行) と組み合わせるのがデバッグの王道
- 「値が True のとき中断」 を使えば、特定の条件でマクロを自動停止できる
よくある質問
値が「コンテキストが無効」と表示されて見えません
マクロが動いていない(黄色い矢印が出ていない)ときは、変数の値は存在しないため、この表示になります。F8キーでマクロを開始するか、止めたい行にブレイクポイントを置いて実行してみてください。
ウォッチ式に 1+1 などの計算式を入れてもいいですか?
はい、大丈夫です。Cells(i, 1).Value のような書き方もできます。「今、セルから何を取得しているか」をコードを書き換えずに確認できるので非常に便利です。
不要になったウォッチ式を消すには?
ウォッチウィンドウ内の消したい行を選んで、Deleteキーを押すだけです。デバッグが終わったら、画面をスッキリさせるために消しておくのがおすすめです。
ローカルウィンドウがあれば、ウォッチはいらないのでは?
ローカルウィンドウは「今の場所」の変数しか見えませんが、ウォッチウィンドウは「別の場所(標準モジュールなど)」にある変数を監視し続けることもできます。また、前述した「条件で止める」機能はウォッチだけの特権です。
マクロを閉じてもウォッチの設定は残りますか?
残念ながら、Excelを閉じるとウォッチの設定は消えてしまいます。次にデバッグする際は、また右クリックから追加してあげてください。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



