VBAのウォッチウィンドウの使い方 | ステップ実行・条件付きウォッチ・Debug.Printとの使い分け

VBAのデバッグで「変数がいつ・どこで変わったか」を追うなら、ウォッチウィンドウが最も効率的です。コードに Debug.Print を書き足さなくても、変数や式の値をリアルタイムで監視できるため、ループや条件分岐の中のバグを素早く特定できます。

この記事では、次の内容を順番に解説します。

  • ウォッチウィンドウの開き方と基本操作
  • ウォッチ式の追加・削除・編集の手順
  • ステップ実行(F8)と組み合わせた使い方
  • 条件付きウォッチで特定の値になったときだけ止める方法
  • Debug.Print・ローカルウィンドウとの使い分け

ウォッチウィンドウを開くには?

VBE(Visual Basic Editor)のメニューから「表示」→「ウォッチウィンドウ」を選ぶと、画面下部にウォッチ専用のエリアが表示されます。一度開いておけば、次回VBAを開いたときも同じ位置に表示されます。

ウォッチウィンドウには次の4つの項目が表示されます。最初は「値」だけ注目すればOKです。

列名内容
監視している変数名(例:i
現在の値(マクロ実行中にどんどん変わります)
変数の種類(数字ならLong、文字ならStringなど)
コンテキストその変数が「どこで使われているか」という情報

ウォッチ式を追加するには?

監視したい変数をウォッチウィンドウに登録することを「ウォッチ式の追加」と言います。一番簡単な方法は、右クリックを使う方法です。

  1. コード上で監視したい変数名(例:total)をマウスで選択して青く反転させる
  2. そのまま右クリックして「ウォッチ式の追加」を選ぶ
  3. 小さな画面が出るので、そのまま「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回押すのは不可能です。そんな時は「条件付きウォッチ」を使います。

  1. 右クリックで「ウォッチ式の追加」を開く
  2. 「式」の欄に、i = 900 のように条件式を書く(※ここがポイント!)
  3. ウォッチの種類を「値が True のとき中断」に変えてOKを押す

この状態でマクロを実行(F5キー)すると、i が900になった瞬間に自動でマクロが一時停止します。これを知っているだけで、デバッグの時間は劇的に短縮されます。

他のツール(ローカル・Debug.Print)との使い分け

VBAには他にもデバッグツールがあります。初心者のうちは以下のように使い分けるのがおすすめです。

ツール特徴使いどころ
ウォッチウィンドウ選んだ変数だけをじっくり追える特定の変数がいつ変わるか知りたい時
ローカルウィンドウ全部の変数を自動で表示してくれるとりあえず全体の状況を見たい時
Debug.Printイミディエイトウィンドウに履歴を残す何回も変わる値を後でまとめて見たい時

まとめ

  • ウォッチウィンドウは、特定の変数が今どんな値かを監視する窓
  • 右クリック → 「ウォッチ式の追加」 が一番簡単
  • F8キー(ステップ実行) と組み合わせるのがデバッグの王道
  • 「値が True のとき中断」 を使えば、特定の条件でマクロを自動停止できる

よくある質問

値が「コンテキストが無効」と表示されて見えません

マクロが動いていない(黄色い矢印が出ていない)ときは、変数の値は存在しないため、この表示になります。F8キーでマクロを開始するか、止めたい行にブレイクポイントを置いて実行してみてください。

ウォッチ式に 1+1 などの計算式を入れてもいいですか?

はい、大丈夫です。Cells(i, 1).Value のような書き方もできます。「今、セルから何を取得しているか」をコードを書き換えずに確認できるので非常に便利です。

不要になったウォッチ式を消すには?

ウォッチウィンドウ内の消したい行を選んで、Deleteキーを押すだけです。デバッグが終わったら、画面をスッキリさせるために消しておくのがおすすめです。

ローカルウィンドウがあれば、ウォッチはいらないのでは?

ローカルウィンドウは「今の場所」の変数しか見えませんが、ウォッチウィンドウは「別の場所(標準モジュールなど)」にある変数を監視し続けることもできます。また、前述した「条件で止める」機能はウォッチだけの特権です。

マクロを閉じてもウォッチの設定は残りますか?

残念ながら、Excelを閉じるとウォッチの設定は消えてしまいます。次にデバッグする際は、また右クリックから追加してあげてください。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール