VBAでマクロを作っていて「この変数、いつ値が変わったんだろう?」と悩んだことはありませんか。
Debug.Printで確認するのもいいけれど、ループが何百回もまわる処理では追いきれないですよね。ブレークポイントで止めても、毎回同じ場所で止まるだけで「特定の条件のときだけ見たい」には対応できません。
そんなときに頼りになるのがウォッチウィンドウです。この記事では、ウォッチウィンドウの表示方法から3種類のウォッチの使い分け、実務で役立つテクニックまで解説します。
VBAのウォッチウィンドウとは
ウォッチウィンドウは、VBE(Visual Basic Editor)に搭載されたデバッグ用のウィンドウです。指定した変数やプロパティの値をリアルタイムで監視できます。
「ウォッチ(Watch)」は英語で「監視する」という意味です。名前のとおり、マクロの実行中に変数の動きを見張ってくれます。
主にできることをまとめると、次のとおりです。
| できること | 使う場面 |
|---|---|
| 変数やプロパティの値をリアルタイム表示 | ループ中に値の変化を追いたいとき |
| 条件を満たしたら自動で一時停止 | 特定の値になった瞬間を捉えたいとき |
| 値が変わった瞬間に自動で一時停止 | いつ値が変わるか分からないとき |
| オブジェクトのプロパティを展開表示 | RangeやWorksheetの中身を確認したいとき |
最大の特徴は「条件を指定して自動停止」ができる点です。これはVBEのデバッグツールの中でウォッチウィンドウだけが持つ機能です。VBEの画面全体の構成については、VBEの画面の見方を図解で解説をあわせてご覧ください。
デバッグウィンドウ3種の比較
VBEには3つのデバッグウィンドウがあります。それぞれの特徴を比較表で整理しておきましょう。
| 比較項目 | ウォッチウィンドウ | ローカルウィンドウ | イミディエイトウィンドウ |
|---|---|---|---|
| 監視対象 | 自分で指定した変数のみ | プロシージャ内のすべての変数 | 手動で入力した式 |
| 条件付き停止 | できる | できない | できない |
| 値の変更検知 | できる | できない | できない |
| リアルタイム更新 | ステップ実行ごとに更新 | ステップ実行ごとに更新 | 手動で入力が必要 |
| 向いている場面 | 特定の変数を条件付きで監視 | 全変数を一覧で確認 | 値の確認や式のテスト |
ローカルウィンドウは「全部見せてくれるけど、指定できない」タイプです。一方、ウォッチウィンドウは「見たいものだけを条件付きで監視できる」のが強みです。
VBEの起動とウォッチウィンドウの表示方法
ウォッチウィンドウを使うには、まずVBEを開く必要があります。
VBE(Visual Basic Editor)の開き方
VBEを開く方法は2つあります。
- ショートカットキー: Alt + F11 を押す(最速の方法です)
- リボンから開く: 「開発」タブ →「Visual Basic」をクリック
「開発」タブが表示されていない場合は、次の手順で追加してください。
- 「ファイル」タブ →「オプション」を開きます
- 「リボンのユーザー設定」を選びます
- 右側の一覧で「開発」にチェックを入れます
- 「OK」をクリックします
ウォッチウィンドウの表示手順
ウォッチウィンドウはデフォルトでは表示されていません。次の手順で表示します。
VBEの画面上部にある「表示」メニューをクリックし、「ウォッチ ウィンドウ」を選択します。VBE画面の下部にウォッチウィンドウが表示されます。
TIP
一度表示すれば、VBEを閉じるまでウォッチウィンドウは表示されたままです。毎回メニューから開く必要はありません。
なお、イミディエイトウィンドウにはCtrl + Gというショートカットがあります。しかしウォッチウィンドウにはデフォルトのショートカットキーが割り当てられていません。メニューからの表示方法を覚えておきましょう。
ウォッチ式の追加方法
ウォッチウィンドウを表示しただけでは、中身は空の状態です。監視したい変数やプロパティを「ウォッチ式」として追加しましょう。追加する方法は3つあります。
メニューから追加する
- VBEのメニューバーから「デバッグ」をクリックします
- 「ウォッチ式の追加」を選択します
- ダイアログが表示されるので「式」欄に監視したい変数名を入力します
- 「OK」をクリックすると、ウォッチウィンドウに追加されます
たとえば、変数 i を監視したいなら「式」欄に i と入力するだけでOKです。
ドラッグで追加する
コード上の変数名をマウスで選択して、ウォッチウィンドウにドラッグ&ドロップする方法です。ダイアログを開かなくていいので、複数の変数をまとめて追加したいときに便利です。
右クリックメニューから追加する
コード上で監視したい変数名にカーソルを置いて右クリックします。「ウォッチ式の追加」を選択すると、変数名が「式」欄に入った状態でダイアログが開きます。そのままOKを押すだけなので手軽です。
ウォッチウィンドウの3種類のウォッチ
ウォッチ式を追加するとき、「ウォッチの種類」を選べます。この設定がウォッチウィンドウの真価を発揮するポイントです。
式ウォッチ(デフォルト)
「式ウォッチ」は、指定した変数やプロパティの現在値をリアルタイムで表示するモードです。ウォッチ式を追加すると、デフォルトでこの設定になります。
マクロをステップ実行(F8)しながら、値がどう変化するかを確認するのに使います。
Sub SampleWatch()
Dim i As Long '--- カウンター ---
Dim total As Long '--- 合計値 ---
total = 0
For i = 1 To 10
total = total + i
Next i
MsgBox total
End Sub
変数 i と total をウォッチ式に追加してみましょう。F8でステップ実行するたびに、値が更新されていく様子を確認できます。
式がTrueのときに中断
「式がTrueのときに中断」は、指定した条件が成立した瞬間に自動でマクロを一時停止するモードです。
たとえば「i = 50」という条件を設定しておきます。Do Loopなどのループ処理が100回まわる中で、50回目だけを確認したいときに最適です。
設定方法は次のとおりです。
- 「ウォッチ式の追加」ダイアログを開きます
- 「式」欄に条件式を入力します(例:
i = 50) - 「ウォッチの種類」で「式がTrueのときに中断」を選択します
- 「OK」をクリックします
ブレークポイントだと「毎回そこで止まる」のが難点です。このモードなら「条件を満たしたときだけ止まる」ので効率的です。
値が変更されたときに中断
「値が変更されたときに中断」は、監視している変数の値が変わった瞬間に自動で一時停止するモードです。
どのタイミングで値が書き換わるか分からないバグの追跡に重宝します。「この変数、いつの間にか0になってる……」というケースですね。
設定方法は「式がTrueのときに中断」と同じです。ウォッチの種類を「値が変更されたときに中断」に変えるだけです。
NOTE
「式がTrueのときに中断」と「値が変更されたときに中断」は、マクロの実行速度にわずかに影響します。VBAがステップごとに条件を評価するためです。大量のウォッチ式を設定するとパフォーマンスが落ちることがあるので、必要最低限に絞りましょう。
3種類の使い分け早見表
どのモードを使えばよいか迷ったときは、次の表を参考にしてください。
| やりたいこと | 選ぶウォッチの種類 | 式の入力例 |
|---|---|---|
| 変数の値をリアルタイムで確認したい | 式ウォッチ | total |
| 特定の条件で止めたい | 式がTrueのときに中断 | i = 50 |
| エラーになる値を捉えたい | 式がTrueのときに中断 | price < 0 |
| いつ値が変わるか調べたい | 値が変更されたときに中断 | flag |
| 配列の要素数を追いたい | 式ウォッチ | UBound(arr) |
実務で役立つ活用テクニック
基本的な使い方がわかったところで、実務で使える便利なテクニックを紹介します。
オブジェクトのプロパティを展開して確認する
ウォッチウィンドウでは、Range型やWorksheet型などのオブジェクト変数も追加できます。追加すると、中身をツリー形式で展開して確認できます。
たとえば Range("A1") をウォッチ式に追加してみましょう。Value、Row、Column、Font、Interiorなど、セルのプロパティが一覧で表示されます。
「フォントサイズって今いくつだっけ?」というとき、イミディエイトウィンドウに打ち込まなくても展開するだけで確認できます。
式を使った高度な監視
ウォッチ式の「式」欄には、単純な変数名だけでなく計算式や比較式も入力できます。
| 式の例 | 用途 |
|---|---|
i | 変数iの値を表示 |
i > 100 | iが100を超えたらTrue |
Len(myStr) | 文字列の長さを表示 |
Range("A" & i).Value | 動的なセル参照の値を表示 |
UBound(arr) - LBound(arr) + 1 | 配列の要素数を表示 |
計算結果や関数の戻り値もリアルタイムで監視できます。複雑な処理のデバッグに役立ちます。
ウォッチ式の編集と削除
追加したウォッチ式を変更したいときは、ウォッチウィンドウ内の式をダブルクリックします。「ウォッチ式の編集」ダイアログが開きます。
不要になったウォッチ式を削除するには、対象の行を右クリックして「ウォッチ式の削除」を選択します。行を選択してDeleteキーを押してもOKです。
イミディエイトウィンドウと組み合わせる
ウォッチウィンドウで値の変化を監視しつつ、イミディエイトウィンドウで値を直接書き換える使い方が強力です。
たとえば、ウォッチウィンドウで total を監視中にしておきます。イミディエイトウィンドウで total = 0 と入力してEnterを押します。すると、ウォッチウィンドウの値もリアルタイムで更新されます。
「変数を0にリセットしたら処理はどう動く?」というシミュレーションが手軽にできます。
ウォッチウィンドウのよくあるトラブルと対処法
使っていて「あれ?」となることがあるかもしれません。よくあるトラブルをまとめました。
| トラブル | 原因 | 対処法 |
|---|---|---|
| 値が「範囲外」と表示される | マクロが実行中でない、またはスコープ外 | マクロをステップ実行中に確認する |
| 値が更新されない | マクロが一時停止していない | ブレークポイントやStop文で止めてから確認する |
| ウォッチウィンドウが消えた | VBEを再起動した、または誤って閉じた | 「表示」メニューから再表示する |
| 式がエラーになる | 変数名のスペルミス、またはスコープ違い | ダブルクリックで式を編集し修正する |
| マクロの動作が遅くなった | ウォッチ式を大量に設定している | 不要なウォッチ式を削除して数を絞る |
TIP
ウォッチウィンドウに追加した式は、VBEを閉じるとリセットされます。次回VBEを開いたときは再度追加が必要です。頻繁に使うウォッチ式がある場合は、コード内にコメントとしてメモしておくと便利です。
まとめ
ウォッチウィンドウは、VBAのデバッグ作業を効率化してくれる強力なツールです。
ポイントをおさらいしましょう。
- 表示方法: VBEの「表示」メニューから「ウォッチ ウィンドウ」を選択
- ウォッチ式の追加: メニュー・ドラッグ・右クリックの3つの方法
- 式ウォッチ: 変数の値をリアルタイムで監視
- Trueのときに中断: 条件を満たしたら自動停止
- 値変更時に中断: 値が変わった瞬間に自動停止
- オブジェクト展開: Rangeなどのプロパティをツリー形式で確認
Debug.Printだけでデバッグしていた方は、「条件付き中断」を試してみてください。ループ処理のデバッグがかなり快適になるはずです。
VBEにはウォッチウィンドウ以外にもデバッグに役立つウィンドウがあります。あわせてチェックしてみてくださいね。
