VBAでマクロを作っていて「この変数、今どんな値が入ってるの?」と確認したくなること、よくありますよね。
MsgBoxで1つずつ表示させる方法だと、変数が増えるたびにコードが煩雑になります。Debug.Printも便利ですが、変数が10個も20個もあると追いきれません。
そんなときに頼りになるのが ローカルウィンドウ です。表示するだけで、プロシージャ内のすべての変数と値が一覧で見えます。この記事では、表示方法からステップ実行との組み合わせ、他のデバッグウィンドウとの使い分けまで解説していきますね。
NOTE
VBEの起動方法や画面の見方は「VBE画面の見方」で解説しています。
Alt+F11でVBEを起動し、「挿入」→「標準モジュール」でコードを書く準備ができます。対象環境はExcel 2016以降(Microsoft 365含む)です。
VBAのローカルウィンドウとは?
ローカルウィンドウは、VBE(Visual Basic Editor)に搭載されている デバッグ用のウィンドウ です。実行中のプロシージャ(Sub〜End Sub)に含まれる すべての変数の名前・値・データ型 を自動的に一覧表示してくれます。VBAの変数の使い方がまだ不安な方は、先にそちらを確認しておくと理解がスムーズです。
難しい設定は一切不要です。ウィンドウを表示しておくだけで、マクロが一時停止したタイミングで変数の状態がズラッと並びます。
ローカルウィンドウで確認できること
ローカルウィンドウには3つの列があり、変数の状態をひと目で把握できます。
| 列名 | 表示される内容 | 確認できること |
|---|---|---|
| 式 | 変数名 | どんな変数が宣言されているか |
| 値 | 変数に入っている値 | 想定どおりの値が入っているか(クリックで直接編集可。Enterで確定、Escで取消) |
| 型 | データ型(Integer, String など) | 型の不一致がないか |
たとえば「数値のつもりで計算しているのに、実は文字列型だった」というバグは、型の列を見れば一発で分かります。VBAを始めたばかりの頃、この手の型ミスで何時間も悩んだ経験がある方は多いのではないでしょうか。
ローカルウィンドウが特に役立つ場面
ローカルウィンドウは、次のようなケースで威力を発揮します。
- 変数が多いプロシージャのデバッグ: 5個以上の変数があると、Debug.Printで全部追うのは大変です
- 配列やオブジェクトの中身確認: 展開表示で要素を1つずつ確認できます
- 型の不一致によるエラー調査: 「型が一致しません」エラーの原因特定に最適です
- ループ中の値の変化を追跡: ステップ実行と組み合わせて1行ずつ確認できます
ローカルウィンドウの表示方法
ローカルウィンドウはデフォルトでは非表示になっていることが多いです。表示する方法を確認しましょう。
メニューから表示する
VBE画面の上部にあるメニューバーから 「表示」→「ローカル ウィンドウ」 を選択します。VBE画面の下部にローカルウィンドウが表示されます。
ショートカットキーはある?
残念ながら、ローカルウィンドウにはデフォルトのショートカットキーが割り当てられていません。イミディエイトウィンドウ(Ctrl + G)のように一発では開けないので、メニューから表示する方法を覚えておきましょう。
一度表示すれば、VBEを閉じるまでローカルウィンドウは表示されたままです。毎回メニューから開く必要はありませんよ。
TIP
会社の共有PCでは、前に使った人がウィンドウのレイアウトを変えていることがあります。ローカルウィンドウが見つからないときは、画面の端に小さく畳まれていないか確認してみてください。メニューの「表示」から再表示すれば元通りになります。
ローカルウィンドウの基本的な使い方
ここからが本題です。実際にサンプルコードを使って、ローカルウィンドウの使い方を体験してみましょう。
サンプルコードで動作を確認する
まずは以下のコードをVBEの標準モジュールに貼り付けてください。
Sub LocalWindowSample()
Dim i As Integer '--- カウンター変数 ---
i = 4
Dim sCategory As String '--- カテゴリ名 ---
sCategory = "食べ物"
Dim vFruits As Variant '--- 果物リスト(配列) ---
vFruits = Array("りんご", "いちご", "ばなな")
Stop '--- ここでマクロが一時停止する ---
End Sub
最後の Stop はプログラムを一時停止させるステートメントです。この行に到達した時点でマクロの実行が止まり、ローカルウィンドウに変数の状態が表示されます。
表示される内容を読み解く
ローカルウィンドウを表示した状態でこのマクロを実行(F5)すると、Stop の行で一時停止します。このとき、ローカルウィンドウには以下のような内容が表示されます。
| 式 | 値 | 型 |
|---|---|---|
| i | 4 | Integer |
| sCategory | 食べ物 | String |
| vFruits | Variant() |
ウィンドウの左上には実行中のプロシージャ名が表示されます。たとえば 「VBAProject.Module1.LocalWindowSample」 のような並びです。「プロジェクト名.モジュール名.プロシージャ名」の順番で読めます。
配列の中身を展開して確認する
配列変数(上の例では vFruits)は、変数名の左に表示される 「+」マーク をクリックすると中身を展開できます。
展開すると、このように要素が1つずつ表示されます。
| 式 | 値 | 型 |
|---|---|---|
| vFruits(0) | りんご | String |
| vFruits(1) | いちご | String |
| vFruits(2) | ばなな | String |
配列の中身を確認するのに For ループで Debug.Print を書く必要がありません。展開するだけで全要素が見えるのはとても便利ですよね。
オブジェクト変数(Range 型や Worksheet 型など)も同じように展開できます。Value や Row、Column といったプロパティが一覧で見えます。「このRangeオブジェクト、何行目を指してるんだっけ?」というときにサッと確認できますよ。
なお、モジュールレベル変数(Dim や Private でモジュール先頭に宣言した変数)は、ローカルウィンドウ先頭の展開可能なエントリの中に表示されます。
列幅の調整
環境によっては、値や型の表示が列に収まりきらず途中で切れてしまうことがあります。そんなときは、列見出しの境界線(「式」と「値」の間など)をマウスでドラッグすると列幅を調整できますよ。
ステップ実行との組み合わせが最強
ローカルウィンドウが最も威力を発揮するのは ステップ実行(F8) との組み合わせです。
ステップ実行とは
ステップ実行とは、コードを 1行ずつ 実行していくデバッグ方法です。VBEで F8 キーを押すたびに1行ずつ処理が進みます。
通常の実行(F5)ではマクロが一瞬で完了してしまうので、途中経過を確認できません。ステップ実行なら「この行を実行したら変数はどう変わるか」を1行ごとに追跡できます。
ステップ実行 + ローカルウィンドウの手順
実際の使い方を見てみましょう。以下のコードで試してみてください。
Sub StepExecutionSample()
Dim total As Long '--- 合計値 ---
Dim i As Long '--- カウンター ---
total = 0
For i = 1 To 5
total = total + i * 100
Next i
MsgBox "合計: " & total
End Sub
手順:
- ローカルウィンドウを表示しておく(メニュー「表示」→「ローカル ウィンドウ」)
- コード内の任意の行にカーソルを置く
F8キーを押してステップ実行を開始するF8を押すたびに1行ずつ進み、ローカルウィンドウの値がリアルタイムで更新される
値が変化した変数は赤くハイライト表示されるので、どこが変わったか一目で分かります。
ループの1周目で i = 1、total = 100 に変わり、2周目で i = 2、total = 300 になる。この変化の流れがローカルウィンドウに表示されるので、処理の動きが手に取るように分かります。
「ループの3周目で値がおかしくなる」といったバグも、ステップ実行 + ローカルウィンドウなら発見が簡単です。
ブレークポイントと組み合わせる
ステップ実行だと最初から1行ずつ進めることになります。「100行目あたりから確認したい」という場合は、ブレークポイント を設定しましょう。
コードの行番号の左余白をクリックするか、確認したい行にカーソルを置いて F9 を押します。ブレークポイントが設定された行は赤く強調表示されるのが目印です。
マクロを F5 で実行すると、ブレークポイントの行で自動的に一時停止します。そこからは F8 でステップ実行に切り替えて、ローカルウィンドウで変数の変化を追えます。
TIP
ブレークポイントは複数設定できます。もう一度
F9を押すと解除されます。すべてのブレークポイントを一括解除したいときは、メニューの 「デバッグ」→「すべてのブレークポイントの解除」 を選択してください。
ローカルウィンドウの実践活用パターン
基本的な使い方がわかったところで、実務で役立つ活用パターンを紹介します。
型の不一致エラーを特定する
VBAを書いていてよく遭遇する 「実行時エラー ’13’: 型が一致しません」 というエラー。ローカルウィンドウを使えば原因の特定がスムーズです。
Sub TypeMismatchSample()
Dim price As Long '--- 単価 ---
Dim quantity As Variant '--- 数量(セルから取得) ---
Dim total As Long '--- 合計 ---
price = 1000
quantity = Range("A1").Value '--- セルの値を取得 ---
total = price * quantity '--- ここでエラーが出るかも ---
End Sub
セルA1に文字列(たとえば「未入力」)が入っていると、掛け算の行で型エラーが発生します。エラーが出たらローカルウィンドウを確認してみてください。
quantityの 値 の列に「未入力」と表示されるquantityの 型 の列に「String」と表示される
「数値のつもりが文字列だった」ことが一目瞭然です。原因が分かれば、If文と IsNumeric を組み合わせて事前チェックを入れるなどの対策がすぐに打てますよね。
ループの途中経過をモニタリングする
ループ処理で「途中から値がおかしくなる」というケースは、ブレークポイント + ローカルウィンドウが最適です。
Sub LoopMonitorSample()
Dim i As Long '--- 行カウンター ---
Dim lastRow As Long '--- 最終行 ---
Dim sName As String '--- 取得した名前 ---
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
sName = Cells(i, 1).Value
'--- 名前が空のセルがあるとここで問題が起きる ---
Cells(i, 2).Value = Left(sName, 3)
Next i
End Sub
ブレークポイントをループ内に設定してステップ実行すれば、i が何行目のときに sName が空になるか、ローカルウィンドウですぐに分かります。
オブジェクト変数のプロパティを一覧確認する
Range 型や Worksheet 型のオブジェクト変数も、ローカルウィンドウで展開して中身を確認できます。
Sub ObjectInspectSample()
Dim rng As Range '--- 対象セル範囲 ---
Set rng = Range("A1:C10")
Stop '--- ここで一時停止 ---
End Sub
Stop で停止した状態で、ローカルウィンドウの rng の左にある「+」をクリックしてみてください。Rows.Count(10)、Columns.Count(3)、Address($A$1:$C$10)といったプロパティが一覧で見えます。
イミディエイトウィンドウで ?rng.Address のように1つずつ打ち込む方法もあります。ただ、複数のプロパティをまとめて確認したいときはローカルウィンドウのほうが効率的です。
デバッグウィンドウ3種の使い分け
VBEにはローカルウィンドウ以外にもデバッグ用のウィンドウがあります。それぞれ得意分野が異なるので、場面に応じて使い分けましょう。
3種類のデバッグウィンドウ比較
| 比較項目 | ローカルウィンドウ | イミディエイトウィンドウ | ウォッチウィンドウ |
|---|---|---|---|
| 表示対象 | すべての変数(自動) | 手動で指定した値 | 手動で指定した変数 |
| 設定の手間 | なし(表示するだけ) | 都度コマンド入力 | ウォッチ式の追加が必要 |
| 条件指定 | できない | できない | 条件に合致したら自動停止が可能 |
| 値の変更 | 一部可能(値の列を直接編集) | 自由に変更可能 | できない |
| 向いている場面 | 全変数をまとめて確認 | ちょい試し・値の書き換え | 特定の変数を条件付きで監視 |
場面別おすすめの使い方
使い分けに迷ったら、次の基準で選んでみてください。
- 「全部の変数をざっと確認したい」 → ローカルウィンドウ。設定不要で一覧が出るので、最初に見るウィンドウとして最適です
- 「1つの値をサッと確認したい」「コードの断片を試したい」 → イミディエイトウィンドウ。
?変数名と打つだけでOKです - 「この変数が特定の値になった瞬間を捉えたい」 → ウォッチウィンドウ。条件付き中断機能が強力です
実際のデバッグでは、ローカルウィンドウで全体を俯瞰するのがおすすめです。怪しい変数はウォッチウィンドウに登録して重点監視すると効率的ですよ。
ローカルウィンドウのよくあるトラブルと対処法
使っていて「あれ?」となるケースをまとめました。
| トラブル | 原因 | 対処法 |
|---|---|---|
| 変数が何も表示されない | マクロが実行中(一時停止中)でない | Stop文やブレークポイントで一時停止してから確認する |
| 値が「Empty」と表示される | 変数に値が代入される前の行で止まっている | F8 で代入行を実行してから確認する |
| ローカルウィンドウが見つからない | 非表示になっている、または画面端に畳まれている | メニュー「表示」→「ローカル ウィンドウ」で再表示 |
| 文字が列に収まらず切れている | 列幅が狭い | 列見出しの境界線をドラッグして幅を広げる |
| 長い文字列が途中までしか表示されない | Value列は先頭255文字までの制限がある | イミディエイトウィンドウで ?変数名 を実行して全文を確認する |
| 配列の中身が表示されない | 配列が初期化されていない | 配列への代入後に一時停止して確認する |
| マクロが実行できない | .xlsx 形式で保存している | .xlsm(マクロ有効ブック)で保存し直す |
NOTE
ローカルウィンドウの表示はマクロの実行速度にはほとんど影響しません。表示しっぱなしにしておいても問題ないので、VBAを書くときは常に表示しておくのがおすすめです。
まとめ
ローカルウィンドウは、VBAのデバッグ作業をぐっと効率化してくれる便利なツールです。
ポイントをおさらいしておきましょう。
- 表示方法: VBEのメニュー「表示」→「ローカル ウィンドウ」を選択
- 自動表示: 設定不要でプロシージャ内のすべての変数を一覧表示
- 3つの列: 「式」(変数名)・「値」(現在の値)・「型」(データ型)
- 配列・オブジェクトの展開: 「+」マークで中身を展開して確認
- ステップ実行(F8)との組み合わせ: 1行ずつ実行しながら値の変化を追跡
- ブレークポイント(F9): 確認したい箇所まで一気に実行して停止
MsgBoxで1つずつ確認していた方は、ローカルウィンドウに切り替えるだけでデバッグがかなり快適になるはずです。まずはこの記事のサンプルコードをコピーして、実際に動かしてみてくださいね。
この記事で紹介したVBA関連記事
- VBE画面の見方を図解で解説 — VBEの画面構成を「基本セット」と「デバッグ用」に分けて整理
- イミディエイトウィンドウの使い方 — Debug.Printとコマンド入力でサッとデバッグ
- ウォッチウィンドウの使い方 — 条件付き中断で特定の変数を重点監視
- Rangeの使い方 — セルの指定・範囲操作を基本から解説
- Do Loopの使い方 — 条件付き繰り返し処理を基本から解説
- Like演算子の使い方 — ワイルドカードで文字列を曖昧比較
- For文の使い方 — 回数指定の繰り返し処理
- VBAの変数の使い方 — 変数の宣言・代入・データ型を基本から解説
- VBA If文の使い方 — 条件分岐の書き方を基本から解説
- VBAの学習順番ロードマップ — デバッグを含むVBA習得の全体像
