<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ローカルウィンドウ &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%ab%e3%82%a6%e3%82%a3%e3%83%b3%e3%83%89%e3%82%a6/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Thu, 28 May 2026 22:58:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>ローカルウィンドウ &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>VBAローカルウィンドウの使い方｜変数の値を一覧で確認してデバッグを効率化</title>
		<link>https://mashukabu.com/excel-vbe-local-window-explanation/</link>
					<comments>https://mashukabu.com/excel-vbe-local-window-explanation/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 03 Jan 2022 13:19:16 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[VBE]]></category>
		<category><![CDATA[ステップ実行]]></category>
		<category><![CDATA[デバッグ]]></category>
		<category><![CDATA[ブレークポイント]]></category>
		<category><![CDATA[ローカルウィンドウ]]></category>
		<category><![CDATA[変数確認]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=703</guid>

					<description><![CDATA[VBAローカルウィンドウの使い方を解説。ステップ実行（F8）との組み合わせ、配列変数の展開確認、型の不一致エラー特定など5つのデバッグ術をサンプルコード付きで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">VBAでマクロを作っていて「この変数、今どんな値が入ってるの？」と確認したくなること、よくありますよね。</p>



<p class="wp-block-paragraph">MsgBoxで1つずつ表示させる方法だと、変数が増えるたびにコードが煩雑になります。Debug.Printも便利ですが、変数が10個も20個もあると追いきれません。</p>



<p class="wp-block-paragraph">そんなときに頼りになるのが <strong>ローカルウィンドウ</strong> です。表示するだけで、プロシージャ内のすべての変数と値が一覧で見えます。この記事では、表示方法からステップ実行との組み合わせ、他のデバッグウィンドウとの使い分けまで解説していきますね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>VBEの起動方法や画面の見方は「<a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBE画面の見方</a>」で解説しています。<code>Alt</code> + <code>F11</code> でVBEを起動し、「挿入」→「標準モジュール」でコードを書く準備ができます。対象環境はExcel 2016以降（Microsoft 365含む）です。</p></blockquote>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">VBAのローカルウィンドウとは？</a><ol><li><a href="#toc2" tabindex="0">ローカルウィンドウで確認できること</a></li><li><a href="#toc3" tabindex="0">ローカルウィンドウが特に役立つ場面</a></li></ol></li><li><a href="#toc4" tabindex="0">ローカルウィンドウの表示方法</a><ol><li><a href="#toc5" tabindex="0">メニューから表示する</a></li><li><a href="#toc6" tabindex="0">ショートカットキーはある？</a></li></ol></li><li><a href="#toc7" tabindex="0">ローカルウィンドウの基本的な使い方</a><ol><li><a href="#toc8" tabindex="0">サンプルコードで動作を確認する</a></li><li><a href="#toc9" tabindex="0">表示される内容を読み解く</a></li><li><a href="#toc10" tabindex="0">配列の中身を展開して確認する</a></li><li><a href="#toc11" tabindex="0">列幅の調整</a></li></ol></li><li><a href="#toc12" tabindex="0">ステップ実行との組み合わせが最強</a><ol><li><a href="#toc13" tabindex="0">ステップ実行とは</a></li><li><a href="#toc14" tabindex="0">ステップ実行 + ローカルウィンドウの手順</a></li><li><a href="#toc15" tabindex="0">ブレークポイントと組み合わせる</a></li></ol></li><li><a href="#toc16" tabindex="0">ローカルウィンドウの実践活用パターン</a><ol><li><a href="#toc17" tabindex="0">型の不一致エラーを特定する</a></li><li><a href="#toc18" tabindex="0">ループの途中経過をモニタリングする</a></li><li><a href="#toc19" tabindex="0">オブジェクト変数のプロパティを一覧確認する</a></li></ol></li><li><a href="#toc20" tabindex="0">デバッグウィンドウ3種の使い分け</a><ol><li><a href="#toc21" tabindex="0">3種類のデバッグウィンドウ比較</a></li><li><a href="#toc22" tabindex="0">場面別おすすめの使い方</a></li></ol></li><li><a href="#toc23" tabindex="0">ローカルウィンドウのよくあるトラブルと対処法</a></li><li><a href="#toc24" tabindex="0">Dictionary オブジェクトの中身をローカルウィンドウで確認する</a></li><li><a href="#toc25" tabindex="0">値を直接編集して「仮の値」でデバッグする</a></li><li><a href="#toc26" tabindex="0">コールスタックを使ってプロシージャ間のデバッグをする</a></li><li><a href="#toc27" tabindex="0">For Each ループでオブジェクトを繰り返すときの変数追跡</a></li><li><a href="#toc28" tabindex="0">ユーザー定義型（Type）の中身をローカルウィンドウで展開する</a></li><li><a href="#toc29" tabindex="0">クラスモジュールのインスタンス変数を確認する</a></li><li><a href="#toc30" tabindex="0">ローカルウィンドウで「変数が見えない」ときの原因チェックリスト</a><ol><li><a href="#toc31" tabindex="0">マクロが実行中か、完全に止まっているかを確認する</a></li><li><a href="#toc32" tabindex="0">値が「Empty」と表示されるとき</a></li><li><a href="#toc33" tabindex="0">オブジェクト変数が「Nothing」と表示されるとき</a></li><li><a href="#toc34" tabindex="0">モジュールレベル変数が見当たらないとき</a></li><li><a href="#toc35" tabindex="0">Option Explicit を入れていない場合の落とし穴</a></li><li><a href="#toc36" tabindex="0">ByRef 引数は呼び出し元の変数と連動する</a></li></ol></li><li><a href="#toc37" tabindex="0">まとめ</a><ol><li><a href="#toc38" tabindex="0">この記事で紹介したVBA関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBAのローカルウィンドウとは？</span></h2>



<p class="wp-block-paragraph">ローカルウィンドウは、VBE（Visual Basic Editor）に搭載されている <strong>デバッグ用のウィンドウ</strong> です。実行中のプロシージャ（Sub〜End Sub）に含まれる <strong>すべての変数の名前・値・データ型</strong> を自動的に一覧表示してくれます。<a href="https://mashukabu.com/excel-vba-variable-explanation/">VBAの変数の使い方</a>がまだ不安な方は、先にそちらを確認しておくと理解がスムーズです。</p>



<p class="wp-block-paragraph">難しい設定は一切不要です。ウィンドウを表示しておくだけで、マクロが一時停止したタイミングで変数の状態がズラッと並びます。</p>



<h3 class="wp-block-heading"><span id="toc2">ローカルウィンドウで確認できること</span></h3>



<p class="wp-block-paragraph">ローカルウィンドウには3つの列があり、変数の状態をひと目で把握できます。</p>



<figure class="wp-block-table"><table><thead><tr><th>列名</th><th>表示される内容</th><th>確認できること</th></tr></thead><tbody><tr><td><strong>式</strong></td><td>変数名</td><td>どんな変数が宣言されているか</td></tr><tr><td><strong>値</strong></td><td>変数に入っている値</td><td>想定どおりの値が入っているか（クリックで直接編集可。Enterで確定、Escで取消）</td></tr><tr><td><strong>型</strong></td><td>データ型（Integer, String など）</td><td>型の不一致がないか</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">たとえば「数値のつもりで計算しているのに、実は文字列型だった」というバグは、型の列を見れば一発で分かります。VBAを始めたばかりの頃、この手の型ミスで何時間も悩んだ経験がある方は多いのではないでしょうか。</p>



<h3 class="wp-block-heading"><span id="toc3">ローカルウィンドウが特に役立つ場面</span></h3>



<p class="wp-block-paragraph">ローカルウィンドウは、次のようなケースで威力を発揮します。</p>



<ul class="wp-block-list"><li><strong>変数が多いプロシージャのデバッグ</strong>: 5個以上の変数があると、Debug.Printで全部追うのは大変です</li><li><strong>配列やオブジェクトの中身確認</strong>: 展開表示で要素を1つずつ確認できます</li><li><strong>型の不一致によるエラー調査</strong>: 「型が一致しません」エラーの原因特定に最適です</li><li><strong>ループ中の値の変化を追跡</strong>: ステップ実行と組み合わせて1行ずつ確認できます</li></ul>



<h2 class="wp-block-heading"><span id="toc4">ローカルウィンドウの表示方法</span></h2>



<p class="wp-block-paragraph">ローカルウィンドウはデフォルトでは非表示になっていることが多いです。表示する方法を確認しましょう。</p>



<h3 class="wp-block-heading"><span id="toc5">メニューから表示する</span></h3>



<p class="wp-block-paragraph">VBE画面の上部にあるメニューバーから <strong>「表示」→「ローカル ウィンドウ」</strong> を選択します。VBE画面の下部にローカルウィンドウが表示されます。</p>



<h3 class="wp-block-heading"><span id="toc6">ショートカットキーはある？</span></h3>



<p class="wp-block-paragraph">残念ながら、ローカルウィンドウにはデフォルトのショートカットキーが割り当てられていません。<a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">イミディエイトウィンドウ</a>（<code>Ctrl + G</code>）のように一発では開けないので、メニューから表示する方法を覚えておきましょう。</p>



<p class="wp-block-paragraph">一度表示すれば、VBEを閉じるまでローカルウィンドウは表示されたままです。毎回メニューから開く必要はありませんよ。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>会社の共有PCでは、前に使った人がウィンドウのレイアウトを変えていることがあります。ローカルウィンドウが見つからないときは、画面の端に小さく畳まれていないか確認してみてください。メニューの「表示」から再表示すれば元通りになります。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc7">ローカルウィンドウの基本的な使い方</span></h2>



<p class="wp-block-paragraph">ここからが本題です。実際にサンプルコードを使って、ローカルウィンドウの使い方を体験してみましょう。</p>



<h3 class="wp-block-heading"><span id="toc8">サンプルコードで動作を確認する</span></h3>



<p class="wp-block-paragraph">まずは以下のコードをVBEの標準モジュールに貼り付けてください。</p>



<pre class="wp-block-code"><code>Sub LocalWindowSample()
    Dim i As Integer      '--- カウンター変数 ---
    i = 4

    Dim sCategory As String  '--- カテゴリ名 ---
    sCategory = &quot;食べ物&quot;

    Dim vFruits As Variant   '--- 果物リスト（配列） ---
    vFruits = Array(&quot;りんご&quot;, &quot;いちご&quot;, &quot;ばなな&quot;)

    Stop  '--- ここでマクロが一時停止する ---
End Sub</code></pre>



<p class="wp-block-paragraph">最後の <code>Stop</code> はプログラムを一時停止させるステートメントです。この行に到達した時点でマクロの実行が止まり、ローカルウィンドウに変数の状態が表示されます。</p>



<h3 class="wp-block-heading"><span id="toc9">表示される内容を読み解く</span></h3>



<p class="wp-block-paragraph">ローカルウィンドウを表示した状態でこのマクロを実行（<code>F5</code>）すると、<code>Stop</code> の行で一時停止します。このとき、ローカルウィンドウには以下のような内容が表示されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>式</th><th>値</th><th>型</th></tr></thead><tbody><tr><td>i</td><td>4</td><td>Integer</td></tr><tr><td>sCategory</td><td>食べ物</td><td>String</td></tr><tr><td>vFruits</td><td>&nbsp;</td><td>Variant()</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ウィンドウの左上には実行中のプロシージャ名が表示されます。たとえば <strong>「VBAProject.Module1.LocalWindowSample」</strong> のような並びです。「プロジェクト名.モジュール名.プロシージャ名」の順番で読めます。</p>



<h3 class="wp-block-heading"><span id="toc10">配列の中身を展開して確認する</span></h3>



<p class="wp-block-paragraph">配列変数（上の例では <code>vFruits</code>）は、変数名の左に表示される <strong>「+」マーク</strong> をクリックすると中身を展開できます。</p>



<p class="wp-block-paragraph">展開すると、このように要素が1つずつ表示されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>式</th><th>値</th><th>型</th></tr></thead><tbody><tr><td>vFruits(0)</td><td>りんご</td><td>String</td></tr><tr><td>vFruits(1)</td><td>いちご</td><td>String</td></tr><tr><td>vFruits(2)</td><td>ばなな</td><td>String</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">配列の中身を確認するのに <code>For</code> ループで <code>Debug.Print</code> を書く必要がありません。展開するだけで全要素が見えるのはとても便利ですよね。</p>



<p class="wp-block-paragraph">オブジェクト変数（<code>Range</code> 型や <code>Worksheet</code> 型など）も同じように展開できます。<code>Value</code> や <code>Row</code>、<code>Column</code> といったプロパティが一覧で見えます。「このRangeオブジェクト、何行目を指してるんだっけ？」というときにサッと確認できますよ。</p>



<p class="wp-block-paragraph">なお、モジュールレベル変数（<code>Dim</code> や <code>Private</code> でモジュール先頭に宣言した変数）は、ローカルウィンドウ先頭の展開可能なエントリの中に表示されます。</p>



<h3 class="wp-block-heading"><span id="toc11">列幅の調整</span></h3>



<p class="wp-block-paragraph">環境によっては、値や型の表示が列に収まりきらず途中で切れてしまうことがあります。そんなときは、列見出しの境界線（「式」と「値」の間など）をマウスでドラッグすると列幅を調整できますよ。</p>



<h2 class="wp-block-heading"><span id="toc12">ステップ実行との組み合わせが最強</span></h2>



<p class="wp-block-paragraph">ローカルウィンドウが最も威力を発揮するのは <strong>ステップ実行（F8）</strong> との組み合わせです。</p>



<h3 class="wp-block-heading"><span id="toc13">ステップ実行とは</span></h3>



<p class="wp-block-paragraph">ステップ実行とは、コードを <strong>1行ずつ</strong> 実行していくデバッグ方法です。VBEで <code>F8</code> キーを押すたびに1行ずつ処理が進みます。</p>



<p class="wp-block-paragraph">通常の実行（<code>F5</code>）ではマクロが一瞬で完了してしまうので、途中経過を確認できません。ステップ実行なら「この行を実行したら変数はどう変わるか」を1行ごとに追跡できます。</p>



<h3 class="wp-block-heading"><span id="toc14">ステップ実行 + ローカルウィンドウの手順</span></h3>



<p class="wp-block-paragraph">実際の使い方を見てみましょう。以下のコードで試してみてください。</p>



<pre class="wp-block-code"><code>Sub StepExecutionSample()
    Dim total As Long   '--- 合計値 ---
    Dim i As Long       '--- カウンター ---

    total = 0

    For i = 1 To 5
        total = total + i * 100
    Next i

    MsgBox &quot;合計: &quot; &amp; total
End Sub</code></pre>



<p class="wp-block-paragraph"><strong>手順:</strong></p>



<ol class="wp-block-list"><li>ローカルウィンドウを表示しておく（メニュー「表示」→「ローカル ウィンドウ」）</li><li>コード内の任意の行にカーソルを置く</li><li><code>F8</code> キーを押してステップ実行を開始する</li><li><code>F8</code> を押すたびに1行ずつ進み、ローカルウィンドウの値がリアルタイムで更新される</li></ol>



<p class="wp-block-paragraph">値が変化した変数は赤くハイライト表示されるので、どこが変わったか一目で分かります。</p>



<p class="wp-block-paragraph">ループの1周目で <code>i = 1</code>、<code>total = 100</code> に変わり、2周目で <code>i = 2</code>、<code>total = 300</code> になる。この変化の流れがローカルウィンドウに表示されるので、処理の動きが手に取るように分かります。</p>



<p class="wp-block-paragraph">「ループの3周目で値がおかしくなる」といったバグも、ステップ実行 + ローカルウィンドウなら発見が簡単です。</p>



<h3 class="wp-block-heading"><span id="toc15">ブレークポイントと組み合わせる</span></h3>



<p class="wp-block-paragraph">ステップ実行だと最初から1行ずつ進めることになります。「100行目あたりから確認したい」という場合は、<strong>ブレークポイント</strong> を設定しましょう。</p>



<p class="wp-block-paragraph">コードの行番号の左余白をクリックするか、確認したい行にカーソルを置いて <code>F9</code> を押します。ブレークポイントが設定された行は赤く強調表示されるのが目印です。</p>



<p class="wp-block-paragraph">マクロを <code>F5</code> で実行すると、ブレークポイントの行で自動的に一時停止します。そこからは <code>F8</code> でステップ実行に切り替えて、ローカルウィンドウで変数の変化を追えます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>ブレークポイントは複数設定できます。もう一度 <code>F9</code> を押すと解除されます。すべてのブレークポイントを一括解除したいときは、メニューの <strong>「デバッグ」→「すべてのブレークポイントの解除」</strong> を選択してください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc16">ローカルウィンドウの実践活用パターン</span></h2>



<p class="wp-block-paragraph">基本的な使い方がわかったところで、実務で役立つ活用パターンを紹介します。</p>



<h3 class="wp-block-heading"><span id="toc17">型の不一致エラーを特定する</span></h3>



<p class="wp-block-paragraph">VBAを書いていてよく遭遇する <strong>「実行時エラー &#8217;13&#8217;: 型が一致しません」</strong> というエラー。ローカルウィンドウを使えば原因の特定がスムーズです。</p>



<pre class="wp-block-code"><code>Sub TypeMismatchSample()
    Dim price As Long      '--- 単価 ---
    Dim quantity As Variant '--- 数量（セルから取得） ---
    Dim total As Long       '--- 合計 ---

    price = 1000
    quantity = Range(&quot;A1&quot;).Value  '--- セルの値を取得 ---

    total = price * quantity  '--- ここでエラーが出るかも ---
End Sub</code></pre>



<p class="wp-block-paragraph">セルA1に文字列（たとえば「未入力」）が入っていると、掛け算の行で型エラーが発生します。エラーが出たらローカルウィンドウを確認してみてください。</p>



<ul class="wp-block-list"><li><code>quantity</code> の <strong>値</strong> の列に「未入力」と表示される</li><li><code>quantity</code> の <strong>型</strong> の列に「String」と表示される</li></ul>



<p class="wp-block-paragraph">「数値のつもりが文字列だった」ことが一目瞭然です。原因が分かれば、<a href="https://mashukabu.com/excel-vba-conditional-branch-explanation/">If文</a>と <code>IsNumeric</code> を組み合わせて事前チェックを入れるなどの対策がすぐに打てますよね。</p>



<h3 class="wp-block-heading"><span id="toc18">ループの途中経過をモニタリングする</span></h3>



<p class="wp-block-paragraph">ループ処理で「途中から値がおかしくなる」というケースは、ブレークポイント + ローカルウィンドウが最適です。</p>



<pre class="wp-block-code"><code>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</code></pre>



<p class="wp-block-paragraph">ブレークポイントをループ内に設定してステップ実行すれば、<code>i</code> が何行目のときに <code>sName</code> が空になるか、ローカルウィンドウですぐに分かります。</p>



<h3 class="wp-block-heading"><span id="toc19">オブジェクト変数のプロパティを一覧確認する</span></h3>



<p class="wp-block-paragraph"><code>Range</code> 型や <code>Worksheet</code> 型のオブジェクト変数も、ローカルウィンドウで展開して中身を確認できます。</p>



<pre class="wp-block-code"><code>Sub ObjectInspectSample()
    Dim rng As Range '--- 対象セル範囲 ---
    Set rng = Range(&quot;A1:C10&quot;)

    Stop  '--- ここで一時停止 ---
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Stop</code> で停止した状態で、ローカルウィンドウの <code>rng</code> の左にある「+」をクリックしてみてください。<code>Rows.Count</code>（10）、<code>Columns.Count</code>（3）、<code>Address</code>（$A$1:$C$10）といったプロパティが一覧で見えます。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">イミディエイトウィンドウ</a>で <code>?rng.Address</code> のように1つずつ打ち込む方法もあります。ただ、複数のプロパティをまとめて確認したいときはローカルウィンドウのほうが効率的です。</p>



<h2 class="wp-block-heading"><span id="toc20">デバッグウィンドウ3種の使い分け</span></h2>



<p class="wp-block-paragraph">VBEにはローカルウィンドウ以外にもデバッグ用のウィンドウがあります。それぞれ得意分野が異なるので、場面に応じて使い分けましょう。</p>



<h3 class="wp-block-heading"><span id="toc21">3種類のデバッグウィンドウ比較</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>ローカルウィンドウ</th><th><a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">イミディエイトウィンドウ</a></th><th><a href="https://mashukabu.com/excel-vbe-watch-window-explanation/">ウォッチウィンドウ</a></th></tr></thead><tbody><tr><td>表示対象</td><td>すべての変数（自動）</td><td>手動で指定した値</td><td>手動で指定した変数</td></tr><tr><td>設定の手間</td><td>なし（表示するだけ）</td><td>都度コマンド入力</td><td>ウォッチ式の追加が必要</td></tr><tr><td>条件指定</td><td>できない</td><td>できない</td><td>条件に合致したら自動停止が可能</td></tr><tr><td>値の変更</td><td>一部可能（値の列を直接編集）</td><td>自由に変更可能</td><td>できない</td></tr><tr><td>向いている場面</td><td>全変数をまとめて確認</td><td>ちょい試し・値の書き換え</td><td>特定の変数を条件付きで監視</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc22">場面別おすすめの使い方</span></h3>



<p class="wp-block-paragraph">使い分けに迷ったら、次の基準で選んでみてください。</p>



<ul class="wp-block-list"><li><strong>「全部の変数をざっと確認したい」</strong> → <strong>ローカルウィンドウ</strong>。設定不要で一覧が出るので、最初に見るウィンドウとして最適です</li><li><strong>「1つの値をサッと確認したい」「コードの断片を試したい」</strong> → <strong><a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">イミディエイトウィンドウ</a></strong>。<code>?変数名</code> と打つだけでOKです</li><li><strong>「この変数が特定の値になった瞬間を捉えたい」</strong> → <strong><a href="https://mashukabu.com/excel-vbe-watch-window-explanation/">ウォッチウィンドウ</a></strong>。条件付き中断機能が強力です</li></ul>



<p class="wp-block-paragraph">実際のデバッグでは、ローカルウィンドウで全体を俯瞰するのがおすすめです。怪しい変数はウォッチウィンドウに登録して重点監視すると効率的ですよ。</p>



<h2 class="wp-block-heading"><span id="toc23">ローカルウィンドウのよくあるトラブルと対処法</span></h2>



<p class="wp-block-paragraph">使っていて「あれ？」となるケースをまとめました。</p>



<p class="wp-block-paragraph">[faq q=&#8221;ローカルウィンドウに変数が何も表示されません。&#8221; a=&#8221;マクロが一時停止中でないと表示されません。StopステートメントやF8キーのステップ実行でマクロを一時停止してから確認してください。&#8221;]<br>[faq q=&#8221;変数の値が「Empty」と表示されます。&#8221; a=&#8221;変数に値が代入される前の行で止まっているためです。F8キーで代入行を実行してから確認してください。&#8221;]<br>[faq q=&#8221;ローカルウィンドウが見当たりません。&#8221; a=&#8221;非表示になっているか、画面端に畳まれています。VBEのメニュー「表示」→「ローカル ウィンドウ」で再表示できます。&#8221;]<br>[faq q=&#8221;文字列の値が途中で切れています。&#8221; a=&#8221;Value列は先頭255文字まで表示されます。全文を確認するにはイミディエイトウィンドウで「?変数名」と入力してEnterを押してください。&#8221;]<br>[faq q=&#8221;配列の中身が表示されません。&#8221; a=&#8221;配列が初期化されていない可能性があります。配列への代入後に一時停止して確認してください。&#8221;]<br>[faq q=&#8221;ローカルウィンドウを表示するとマクロが遅くなりますか？&#8221; a=&#8221;ほとんど影響しません。VBAを書くときは常にローカルウィンドウを表示しておくことをおすすめします。&#8221;]</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>ローカルウィンドウの表示はマクロの実行速度にはほとんど影響しません。表示しっぱなしにしておいても問題ないので、VBAを書くときは常に表示しておくのがおすすめです。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc24">Dictionary オブジェクトの中身をローカルウィンドウで確認する</span></h2>



<p class="wp-block-paragraph">業務でデータの集計や重複チェックに使われる <strong>Dictionary オブジェクト</strong> も、ローカルウィンドウで中身を確認できます。キーと値のペアを保持するため「今どんなデータが溜まっているのか」が見えにくいのですが、展開表示を使えば一気に把握できますよ。</p>



<p class="wp-block-paragraph">以下のサンプルコードを標準モジュールに貼り付けて実行（<code>F5</code>）してみてください。</p>



<pre class="wp-block-code"><code>Sub DictionarySample()
    Dim d As Object
    Set d = CreateObject(&quot;Scripting.Dictionary&quot;)

    d.Add &quot;りんご&quot;, 120   '--- キー:商品名 / 値:単価 ---
    d.Add &quot;いちご&quot;, 300
    d.Add &quot;ばなな&quot;, 90

    Stop  '--- ここで一時停止 ---
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Stop</code> で停止したら、ローカルウィンドウの <code>d</code> の左にある「+」マークをクリックして展開してみましょう。次のような項目が確認できます。</p>



<ul class="wp-block-list"><li><strong><code>d.Count</code></strong>: 登録されている件数（この例では <code>3</code>）</li><li><strong><code>d.Keys</code></strong>: キーの配列。さらに展開すると「りんご」「いちご」「ばなな」が並びます</li><li><strong><code>d.Items</code></strong>: 値の配列。展開すると「120」「300」「90」が見えます</li></ul>



<p class="wp-block-paragraph">ただし、<code>Keys</code> と <code>Items</code> は別々の配列として展開されるため、「どのキーにどの値が対応しているか」を一覧で突き合わせるのは少し手間です。キーと値のペアをまとめて確認したいときは、<code>For Each</code> で回しながら <a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">イミディエイトウィンドウ</a> に <code>Debug.Print</code> する方法のほうが向いているケースもあります。状況に応じて使い分けてみてくださいね。</p>



<h2 class="wp-block-heading"><span id="toc25">値を直接編集して「仮の値」でデバッグする</span></h2>



<p class="wp-block-paragraph">ローカルウィンドウの <strong>「値」列はクリックして直接編集できます</strong>。停止中に値の上をクリックして入力し、<code>Enter</code> で確定、<code>Esc</code> でキャンセルです。</p>



<pre class="wp-block-code"><code>Sub EditValueSample()
    Dim n As Integer
    n = 5

    Stop  '--- ここで n の値を書き換えてみる ---

    If n = 0 Then
        MsgBox &quot;ゼロ除算を回避しました&quot;
    Else
        MsgBox 100 / n
    End If
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Stop</code> で止めたあと <code>n</code> の値を <code>0</code> に書き換えれば、「特定の値が来たときだけ起きるエラー」をその場で再現できます。逆に、エラー状態の変数を正常値に書き換えてその先のコードを動かす、といった使い方も便利です。なお編集できるのは Integer・String・Boolean などのプリミティブ型のみで、オブジェクト型の値は変更できません。</p>



<h2 class="wp-block-heading"><span id="toc26">コールスタックを使ってプロシージャ間のデバッグをする</span></h2>



<p class="wp-block-paragraph">マクロが大きくなると、あるSubが別のSubを呼び出す「入れ子」の構造になります。こうしたケースでは「今どの関数から呼ばれているのか」を把握することがデバッグの鍵になります。</p>



<pre class="wp-block-code"><code>Sub CalcTotal()
    Dim total As Long
    total = CalcRow(3) + CalcRow(5)
    MsgBox total
End Sub

Function CalcRow(ByVal price As Long) As Long
    Dim qty As Long
    qty = 10
    Stop  '--- ここで一時停止 ---
    CalcRow = price * qty
End Function</code></pre>



<p class="wp-block-paragraph"><code>CalcRow</code> の中で停止したとき、ローカルウィンドウ上部左側の <strong>プロシージャ名のドロップダウン</strong> を開くと、呼び出し階層（コールスタック）を切り替えられます。呼び出し元の <code>CalcTotal</code> を選べば、その時点での <code>CalcTotal</code> 側の変数を確認できます。</p>



<p class="wp-block-paragraph">より明示的に階層を見たいときは、メニューの <strong>「デバッグ」→「コール スタック」（<code>Ctrl + L</code>）</strong> で呼び出し順を一覧表示できます。「どの関数から、どんな引数で呼ばれたか」が分かるため、引数の渡し方ミスを発見しやすくなりますよ。変数の宣言や引数の扱いに不安がある方は、<a href="https://mashukabu.com/excel-vba-variable-explanation/">VBAの変数の使い方</a> もあわせて確認しておくと安心です。</p>



<h2 class="wp-block-heading"><span id="toc27">For Each ループでオブジェクトを繰り返すときの変数追跡</span></h2>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/vba-howto-use-for-each-next/">For Each〜Next ループ</a> でセル範囲やシートを繰り返す場合も、ローカルウィンドウで各イテレーションの変数の状態を追えます。</p>



<pre class="wp-block-code"><code>Sub ForEachSample()
    Dim ws As Worksheet   '--- ループ変数（ワークシート）---
    Dim total As Long     '--- 合計行数 ---

    total = 0

    For Each ws In ThisWorkbook.Worksheets
        total = total + ws.UsedRange.Rows.Count
        Stop  '--- 各シートを処理後に一時停止 ---
    Next ws

    MsgBox &quot;全シートの合計行数: &quot; &amp; total
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Stop</code> で止まるたびにローカルウィンドウの <code>ws</code> を展開すると、その周で処理しているシートの <code>Name</code>（シート名）・<code>Index</code>（シート番号）・<code>UsedRange.Address</code>（使用範囲）が確認できます。数値カウンターの <code>i</code> と違い、<strong>オブジェクトのプロパティ単位で状態を把握できる</strong>のが For Each × ローカルウィンドウの強みです。</p>



<p class="wp-block-paragraph">デバッグが終わったら <code>Stop</code> を削除してください。「3周目だけ止まってほしい」という場合は Stop を書かず、<a href="https://mashukabu.com/excel-vbe-watch-window-explanation/">ウォッチウィンドウ</a> の条件付き中断（<code>total >= 300</code> など）を使うほうが効率的です。</p>



<h2 class="wp-block-heading"><span id="toc28">ユーザー定義型（Type）の中身をローカルウィンドウで展開する</span></h2>



<p class="wp-block-paragraph">業務VBAで「商品マスタの1行ぶんをひとまとめにして扱いたい」というときに便利なのが <strong>ユーザー定義型（Type）</strong> です。配列やDictionaryと違ってフィールド名で値を取り出せるので、可読性が高くなります。ローカルウィンドウは、このユーザー定義型の中身も配列と同じように展開して確認できますよ。</p>



<p class="wp-block-paragraph">以下のサンプルコードを標準モジュールに貼り付けてみてください。</p>



<pre class="wp-block-code"><code>'--- 商品データ用のユーザー定義型 ---
Type ProductInfo
    Code As String      '--- 商品コード ---
    ProdName As String  '--- 商品名 ---
    Price As Long       '--- 単価 ---
    InStock As Boolean  '--- 在庫有無 ---
End Type

Sub UserDefinedTypeSample()
    Dim p As ProductInfo
    p.Code = &quot;A001&quot;
    p.ProdName = &quot;りんごジュース&quot;
    p.Price = 180
    p.InStock = True

    Stop  '--- ここで一時停止 ---
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Stop</code> で停止したらローカルウィンドウの <code>p</code> の左にある「+」をクリックしてください。次のように展開されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>式</th><th>値</th><th>型</th></tr></thead><tbody><tr><td>p.Code</td><td>A001</td><td>String</td></tr><tr><td>p.ProdName</td><td>りんごジュース</td><td>String</td></tr><tr><td>p.Price</td><td>180</td><td>Long</td></tr><tr><td>p.InStock</td><td>True</td><td>Boolean</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">フィールド名と値・型がきれいに並ぶので、<code>Debug.Print p.Code & "/" & p.ProdName & "/" & p.Price</code> のように1つずつ書き出す必要がありません。フィールドが10個あっても、ワンクリックで全部見えますよ。</p>



<p class="wp-block-paragraph">ユーザー定義型を配列にまとめた場合（<code>Dim arr(1 To 100) As ProductInfo</code> など）も同じように展開できます。<code>arr(1)</code> を展開すれば1番目の商品の全フィールドが、<code>arr(2)</code> を展開すれば2番目の商品の全フィールドが見えます。マスタ系の処理を作るときは、Typeとローカルウィンドウの組み合わせを覚えておくとデバッグがかなり楽になります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>ネストしたユーザー定義型（Typeの中にTypeを持つ構造）でも展開は階層的に動きます。たとえば <code>ProductInfo</code> の中に <code>SupplierInfo</code> 型のフィールドがあれば、<code>p.Supplier</code> をさらに「+」で開いてフィールドを確認できます。複雑なデータ構造ほどローカルウィンドウの威力が際立ちます。</p></blockquote>



<p class="wp-block-paragraph">なお、Typeのフィールド名は <code>Name</code> のようなVBA予約語や <code>Worksheet.Name</code> と衝突しやすい名前を避けるのがおすすめです。上のサンプルで <code>Name</code> を使わず <code>ProdName</code> にしているのも、トラブルを避けるためです。<a href="https://mashukabu.com/excel-vba-variable-explanation/">VBAの変数の使い方</a> の記事も合わせて読むと、Typeの宣言・代入の基本がより理解しやすくなりますよ。</p>



<h2 class="wp-block-heading"><span id="toc29">クラスモジュールのインスタンス変数を確認する</span></h2>



<p class="wp-block-paragraph">オブジェクト指向で書いたVBAでも、ローカルウィンドウは活躍します。クラスモジュールで作ったインスタンスは、Range や Worksheet と同じようにオブジェクト変数として「+」で展開できますよ。</p>



<p class="wp-block-paragraph">まずクラスモジュールを1つ追加します。VBEのプロジェクトエクスプローラーで右クリック→「挿入」→「クラスモジュール」を選び、プロパティウィンドウで <code>(オブジェクト名)</code> を <code>Employee</code> に変更してください。</p>



<pre class="wp-block-code"><code>'--- クラスモジュール: Employee ---
Public EmpID As String      '--- 社員ID ---
Public EmpName As String    '--- 氏名 ---
Public Salary As Long       '--- 月給 ---

Private mBonusRate As Double  '--- ボーナス係数（内部用） ---

Public Property Let BonusRate(ByVal v As Double)
    mBonusRate = v
End Property

Public Property Get BonusRate() As Double
    BonusRate = mBonusRate
End Property

Public Function AnnualIncome() As Long
    AnnualIncome = Salary * 12 + CLng(Salary * mBonusRate)
End Function</code></pre>



<p class="wp-block-paragraph">標準モジュール側で次のように呼び出します。</p>



<pre class="wp-block-code"><code>Sub ClassInspectSample()
    Dim emp As Employee
    Set emp = New Employee

    emp.EmpID = &quot;E001&quot;
    emp.EmpName = &quot;山田 太郎&quot;
    emp.Salary = 300000
    emp.BonusRate = 2.5

    Stop  '--- ここで一時停止 ---

    MsgBox emp.EmpName &amp; &quot; の年収: &quot; &amp; emp.AnnualIncome
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Stop</code> で停止して <code>emp</code> の「+」をクリックすると、<code>EmpID</code>、<code>EmpName</code>、<code>Salary</code> といったPublicプロパティの値・型が一覧で見えます。<code>BonusRate</code> のように <code>Property Get/Let</code> で公開している項目も、Getプロパティの戻り値として表示されますよ。</p>



<p class="wp-block-paragraph">クラスのメソッド内部で停止した場合は、ローカルウィンドウに <strong><code>Me</code></strong> という特別な行が現れます。これは「自分自身のインスタンス」を表していて、<code>Me</code> を展開すれば自クラスの全プロパティが確認できます。デバッグ中に「あれ、今このメソッドはどのインスタンスから呼ばれてる？」と迷ったら、<code>Me</code> を見れば一発で分かります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>Privateで宣言した内部変数（上の例の <code>mBonusRate</code>）は、外部のSubから停止した場合は直接見えないことがあります。クラス内部のメソッドで停止した場合は <code>Me</code> の階層に表示されるので、内部状態を確認したいときはクラスメソッド側でブレークするのがおすすめです。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc30">ローカルウィンドウで「変数が見えない」ときの原因チェックリスト</span></h2>



<p class="wp-block-paragraph">「ローカルウィンドウを表示したのに変数が出ない」「展開したらEmptyやNothingばかりで何も分からない」というケース、けっこうあります。原因のパターンと対処法をまとめておきますね。</p>



<h3 class="wp-block-heading"><span id="toc31">マクロが実行中か、完全に止まっているかを確認する</span></h3>



<p class="wp-block-paragraph">ローカルウィンドウは <strong>マクロが一時停止中</strong> のときだけ変数を表示します。F5で普通に実行している間や、すでに End Sub まで終わってしまった後は何も表示されません。</p>



<ul class="wp-block-list"><li><strong>対処</strong>: 確認したい行に <code>Stop</code> を書くか、<code>F9</code> でブレークポイントを設定してから実行する</li><li>一時停止中はVBEのタイトルバーに「[中断]」と表示されるのが目印です</li></ul>



<h3 class="wp-block-heading"><span id="toc32">値が「Empty」と表示されるとき</span></h3>



<p class="wp-block-paragraph"><code>Empty</code> は <strong>Variant型の変数に何も代入されていない状態</strong> を示します。</p>



<pre class="wp-block-code"><code>Sub EmptyCheckSample()
    Dim x As Variant
    Stop  '--- ここで x を見るとEmpty ---
    x = 100
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Stop</code> を <code>x = 100</code> の <strong>後</strong> に移動すれば、<code>x</code> の値は <code>100</code> と表示されます。「代入前の行で止まっていないか」をまず疑ってみてください。</p>



<h3 class="wp-block-heading"><span id="toc33">オブジェクト変数が「Nothing」と表示されるとき</span></h3>



<p class="wp-block-paragraph">Range や Worksheet などのオブジェクト変数は、<code>Set</code> で値をセットしないと <code>Nothing</code> のまま表示されます。</p>



<pre class="wp-block-code"><code>Sub NothingCheckSample()
    Dim ws As Worksheet
    Stop  '--- ここで ws は Nothing ---
    Set ws = ThisWorkbook.Worksheets(1)
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Set</code> の <strong>後</strong> で停止すれば、<code>ws</code> を展開してプロパティが見えます。逆に、処理途中で <code>Set ws = Nothing</code> を実行した後はもう中身が見えなくなる点にも注意してくださいね。</p>



<h3 class="wp-block-heading"><span id="toc34">モジュールレベル変数が見当たらないとき</span></h3>



<p class="wp-block-paragraph"><code>Dim</code> や <code>Public</code> をモジュールの先頭で宣言した変数（モジュールレベル変数）は、プロシージャ内の変数と <strong>別のエントリ</strong> に表示されます。ローカルウィンドウの先頭近くに、モジュール名の付いた展開可能な行があるはずです。「+」で開けばモジュールレベル変数の一覧が出ます。</p>



<pre class="wp-block-code"><code>'--- モジュール先頭で宣言（モジュールレベル変数） ---
Public gCounter As Long

Sub IncrementSample()
    Dim localVar As Long  '--- こちらはプロシージャ変数 ---
    gCounter = gCounter + 1
    localVar = gCounter * 10

    Stop  '--- localVar はすぐ見えるが gCounter はモジュール側エントリ ---
End Sub</code></pre>



<p class="wp-block-paragraph">「変数が見当たらない」と感じたら、まずモジュール側のエントリを開いてみる癖をつけておくと安心です。</p>



<h3 class="wp-block-heading"><span id="toc35">Option Explicit を入れていない場合の落とし穴</span></h3>



<p class="wp-block-paragraph">モジュールの先頭に <code>Option Explicit</code> を書いていないと、タイプミスした変数名が <strong>新しい変数として自動で作られてしまう</strong> ことがあります。ローカルウィンドウを見て「あれ、知らない変数が増えてる？」と思ったら、変数名のスペルミスが疑わしいです。</p>



<ul class="wp-block-list"><li><strong>対処</strong>: モジュール先頭に <code>Option Explicit</code> を必ず書く。VBEの「ツール」→「オプション」で「変数の宣言を強制する」にチェックを入れておくと、新しいモジュールには自動で挿入されます</li></ul>



<h3 class="wp-block-heading"><span id="toc36">ByRef 引数は呼び出し元の変数と連動する</span></h3>



<p class="wp-block-paragraph">ByRef（参照渡し）で受け取った引数は、ローカルウィンドウ上では <strong>呼び出し先の引数名</strong> で表示されます。値を書き換えると呼び出し元の変数も書き換わるので、「思っていた変数と中身が違う」というときは参照渡しを疑ってみてください。</p>



<pre class="wp-block-code"><code>Sub CallerSample()
    Dim n As Long
    n = 10
    Call AddTen(n)  '--- 参照渡しで n が呼び出される ---
    Stop            '--- ここで n は 20 になっている ---
End Sub

Sub AddTen(ByRef value As Long)
    value = value + 10  '--- 呼び出し元の n も書き換わる ---
End Sub</code></pre>



<p class="wp-block-paragraph">参照渡しと値渡しの違いに不安がある方は、ローカルウィンドウで実際の動きを確認してみると一気に理解が進みますよ。詳しい画面構成は <a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBE画面の見方</a> もあわせて参考にしてみてください。</p>



<h2 class="wp-block-heading"><span id="toc37">まとめ</span></h2>



<p class="wp-block-paragraph">ローカルウィンドウは、VBAのデバッグ作業をぐっと効率化してくれる便利なツールです。</p>



<p class="wp-block-paragraph">ポイントをおさらいしておきましょう。</p>



<ul class="wp-block-list"><li><strong>表示方法</strong>: VBEのメニュー「表示」→「ローカル ウィンドウ」を選択</li><li><strong>自動表示</strong>: 設定不要でプロシージャ内のすべての変数を一覧表示</li><li><strong>3つの列</strong>: 「式」（変数名）・「値」（現在の値）・「型」（データ型）</li><li><strong>配列・オブジェクトの展開</strong>: 「+」マークで中身を展開して確認</li><li><strong>ステップ実行（F8）との組み合わせ</strong>: 1行ずつ実行しながら値の変化を追跡</li><li><strong>ブレークポイント（F9）</strong>: 確認したい箇所まで一気に実行して停止</li></ul>



<p class="wp-block-paragraph">MsgBoxで1つずつ確認していた方は、ローカルウィンドウに切り替えるだけでデバッグがかなり快適になるはずです。まずはこの記事のサンプルコードをコピーして、実際に動かしてみてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc38">この記事で紹介したVBA関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBE画面の見方を図解で解説</a> &#8212; VBEの画面構成を「基本セット」と「デバッグ用」に分けて整理</li><li><a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">イミディエイトウィンドウの使い方</a> &#8212; Debug.Printとコマンド入力でサッとデバッグ</li><li><a href="https://mashukabu.com/excel-vbe-watch-window-explanation/">ウォッチウィンドウの使い方</a> &#8212; 条件付き中断で特定の変数を重点監視</li><li><a href="https://mashukabu.com/excel-vba-howto-use-range/">Rangeの使い方</a> &#8212; セルの指定・範囲操作を基本から解説</li><li><a href="https://mashukabu.com/how-to-use-do-loop/">Do Loopの使い方</a> &#8212; 条件付き繰り返し処理を基本から解説</li><li><a href="https://mashukabu.com/excel-vba-like-wildcard/">Like演算子の使い方</a> &#8212; ワイルドカードで文字列を曖昧比較</li><li><a href="https://mashukabu.com/excel-vba-howto-use-for/">For文の使い方</a> &#8212; 回数指定の繰り返し処理</li><li><a href="https://mashukabu.com/excel-vba-variable-explanation/">VBAの変数の使い方</a> &#8212; 変数の宣言・代入・データ型を基本から解説</li><li><a href="https://mashukabu.com/excel-vba-conditional-branch-explanation/">VBA If文の使い方</a> &#8212; 条件分岐の書き方を基本から解説</li><li><a href="https://mashukabu.com/excel-vba-learning-roadmap/">VBAの学習順番ロードマップ</a> &#8212; デバッグを含むVBA習得の全体像</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-vbe-local-window-explanation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VBAイミディエイトウィンドウの使い方｜Debug.Printでデバッグ効率化</title>
		<link>https://mashukabu.com/excel-vbe-immediate-window-explanation/</link>
					<comments>https://mashukabu.com/excel-vbe-immediate-window-explanation/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sun, 02 Jan 2022 12:31:26 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[Debug.Assert]]></category>
		<category><![CDATA[Debug.Print]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[VBE]]></category>
		<category><![CDATA[イミディエイトウィンドウ]]></category>
		<category><![CDATA[デバッグ]]></category>
		<category><![CDATA[ローカルウィンドウ]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=697</guid>

					<description><![CDATA[VBAのイミディエイトウィンドウの開き方からDebug.PrintとDebug.Assertの使い方、電卓として使う方法、ローカル・ウォッチウィンドウとの比較まで解説。MsgBoxより速く、止まらずにデバッグできるようになります。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「変数の中身、今なんだっけ？」</p>



<p class="wp-block-paragraph">VBAでマクロを書いていると、こんな場面がしょっちゅうありますよね。MsgBoxを仕込んで確認→消して→またMsgBox&#8230;&#8230;。ループ処理が100回まわるマクロだと、OKボタンを100回押す羽目になります。</p>



<p class="wp-block-paragraph">その手間、<strong>イミディエイトウィンドウ</strong>を使えば一瞬で解決できます。この記事では、Debug.Printの基本から電卓的な使い方まで解説します。Debug.Assertによるエラー早期検出もあわせてまとめていきますね。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">VBAのイミディエイトウィンドウとは</a><ol><li><a href="#toc2" tabindex="0">できること3つ（出力・実行・電卓）</a></li><li><a href="#toc3" tabindex="0">MsgBoxとの決定的な違い</a></li></ol></li><li><a href="#toc4" tabindex="0">イミディエイトウィンドウの開き方</a><ol><li><a href="#toc5" tabindex="0">ショートカットキーで開く（Ctrl+G）</a></li><li><a href="#toc6" tabindex="0">VBE画面での位置と表示確認</a></li></ol></li><li><a href="#toc7" tabindex="0">Debug.Printの基本的な使い方</a><ol><li><a href="#toc8" tabindex="0">変数の値を出力する</a></li><li><a href="#toc9" tabindex="0">複数の値を1行に並べる（;と,の違い）</a></li><li><a href="#toc10" tabindex="0">ループ内で使う</a></li></ol></li><li><a href="#toc11" tabindex="0">イミディエイトウィンドウを電卓として使う</a><ol><li><a href="#toc12" tabindex="0">?（クエスチョン）で即計算・即確認</a></li><li><a href="#toc13" tabindex="0">マクロ実行中断後に変数値を調べる</a></li><li><a href="#toc14" tabindex="0">ワンライナーでシートを操作する</a></li></ol></li><li><a href="#toc15" tabindex="0">Debug.Assertでエラーを早期に検出する</a><ol><li><a href="#toc16" tabindex="0">Debug.Assertの書き方と動作</a></li><li><a href="#toc17" tabindex="0">Debug.PrintとAssertの使い分け</a></li></ol></li><li><a href="#toc18" tabindex="0">デバッグウィンドウ3種の比較と使い分け</a><ol><li><a href="#toc19" tabindex="0">イミディエイト・ローカル・ウォッチの違い一覧</a></li><li><a href="#toc20" tabindex="0">どのシーンでどれを使うか</a></li></ol></li><li><a href="#toc21" tabindex="0">実務シナリオ別の使い方</a><ol><li><a href="#toc22" tabindex="0">ループが途中で止まる原因を調べたい</a></li><li><a href="#toc23" tabindex="0">If文が想定通り分岐しているか確認したい</a></li></ol></li><li><a href="#toc24" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBAのイミディエイトウィンドウとは</span></h2>



<p class="wp-block-paragraph">イミディエイトウィンドウは、VBE（Visual Basic Editor）に組み込まれた<strong>デバッグ用の対話パネル</strong>です。英語では「Immediate Window」と呼ばれ、名前のとおり「即座に」結果を確認できるのが特長です。</p>



<h3 class="wp-block-heading"><span id="toc2">できること3つ（出力・実行・電卓）</span></h3>



<p class="wp-block-paragraph">主にできることは次の3つです。</p>



<ul class="wp-block-list"><li><strong>出力</strong>: <code>Debug.Print</code> で変数やプロパティの値を表示する</li><li><strong>実行</strong>: VBAのコードを1行ずつその場で実行する</li><li><strong>電卓</strong>: <code>?</code>（クエスチョンマーク）で計算結果を即確認する</li></ul>



<p class="wp-block-paragraph">マクロの実行を止めずに裏側で情報を確認できるのが最大のメリットです。MsgBoxのようにダイアログが出ないので、処理の流れを邪魔しません。</p>



<h3 class="wp-block-heading"><span id="toc3">MsgBoxとの決定的な違い</span></h3>



<p class="wp-block-paragraph">MsgBoxでも変数の値は確認できます。では何が違うのでしょうか。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>MsgBox</th><th>Debug.Print</th></tr></thead><tbody><tr><td>表示場所</td><td>ダイアログ（画面の前面）</td><td>イミディエイトウィンドウ</td></tr><tr><td>操作の中断</td><td>OKを押すまで止まる</td><td>中断なしで続行</td></tr><tr><td>ループでの利用</td><td>回数分ダイアログが出る</td><td>まとめて一覧表示</td></tr><tr><td>出力の保存</td><td>消えたら見返せない</td><td>ウィンドウに残る</td></tr><tr><td>本番コードへの影響</td><td>消し忘れるとユーザーに表示される</td><td>表示されないので安全</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ポイントは「<strong>マクロの動きを邪魔しない</strong>」ことです。Debug.Printはユーザーの画面には何も出ません。消し忘れても実害がないので、デバッグ用の出力として安心して使えます。</p>



<h2 class="wp-block-heading"><span id="toc4">イミディエイトウィンドウの開き方</span></h2>



<p class="wp-block-paragraph">本記事はWindows版Excelを対象としています。Excel 2010以降（Microsoft 365含む）であれば、同じ手順で操作できます。</p>



<p class="wp-block-paragraph">イミディエイトウィンドウを使うには、まずVBEを起動する必要があります。Excelで <strong>Alt + F11</strong> を押してVBEを開きましょう。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBE画面の見方</a>がまだよく分からないという方は、先にそちらの記事を読んでおくとスムーズです。</p>



<h3 class="wp-block-heading"><span id="toc5">ショートカットキーで開く（Ctrl+G）</span></h3>



<p class="wp-block-paragraph">VBEを開いたら、次のいずれかの方法でイミディエイトウィンドウを表示します。</p>



<ul class="wp-block-list"><li><strong>ショートカットキー</strong>: <strong>Ctrl + G</strong></li><li><strong>メニュー</strong>: 表示 → イミディエイトウィンドウ</li></ul>



<p class="wp-block-paragraph">Ctrl + Gが一番かんたんです。VBEが開いている状態で押せば、画面下部にパネルがすぐ現れます。</p>



<h3 class="wp-block-heading"><span id="toc6">VBE画面での位置と表示確認</span></h3>



<p class="wp-block-paragraph">イミディエイトウィンドウは、デフォルトではVBE画面の下部に表示されます。コードウィンドウの下にある横長のパネルがそれです。</p>



<p class="wp-block-paragraph">パネル上部に「イミディエイト」と書かれていれば正しく表示されています。表示位置を変えたい場合は、タイトルバーをドラッグすると自由に移動できます。フローティングウィンドウにもできますし、画面の端にドッキングさせることも可能です。</p>



<p class="wp-block-paragraph">もし閉じてしまっても、もう一度 Ctrl + G を押せばすぐ復活します。</p>



<h2 class="wp-block-heading"><span id="toc7">Debug.Printの基本的な使い方</span></h2>



<p class="wp-block-paragraph">イミディエイトウィンドウに値を出力するには、コード内に <code>Debug.Print</code> と書きます。これがデバッグ作業の基本中の基本です。</p>



<h3 class="wp-block-heading"><span id="toc8">変数の値を出力する</span></h3>



<p class="wp-block-paragraph">もっともシンプルな使い方から見ていきましょう。</p>



<pre class="wp-block-code"><code>Sub DebugPrintBasic()
    Dim total As Long '--- 合計値 ---
    total = 100 + 200
    Debug.Print total
End Sub</code></pre>



<p class="wp-block-paragraph">このコードを実行すると、イミディエイトウィンドウに <code>300</code> と表示されます。MsgBoxと違ってダイアログは出ないので、マクロはそのまま最後まで走ります。</p>



<p class="wp-block-paragraph">文字列と組み合わせると、さらに見やすくなります。</p>



<pre class="wp-block-code"><code>Sub DebugPrintWithLabel()
    Dim price As Long '--- 商品価格 ---
    Dim tax As Long   '--- 消費税額 ---
    price = 1000
    tax = price * 0.1
    Debug.Print &quot;税込価格: &quot; &amp; price + tax
End Sub</code></pre>



<p class="wp-block-paragraph">ラベルを付けておくと、何の値が出力されたのか一目で分かりますね。<a href="https://mashukabu.com/excel-vba-variable-explanation/">VBA変数の使い方</a>を復習したい方はそちらもチェックしてみてください。</p>



<h3 class="wp-block-heading"><span id="toc9">複数の値を1行に並べる（;と,の違い）</span></h3>



<p class="wp-block-paragraph">Debug.Printでは、セミコロン（<code>;</code>）やカンマ（<code>,</code>）で複数の値を1行にまとめて出力できます。ただし、それぞれ挙動が違います。</p>



<pre class="wp-block-code"><code>Sub DebugPrintSeparator()
    '--- セミコロン：直後に続けて出力 ---
    Debug.Print &quot;A&quot;; &quot;B&quot;; &quot;C&quot;
    '--- 出力結果: ABC

    '--- カンマ：タブ区切りで出力 ---
    Debug.Print &quot;A&quot;, &quot;B&quot;, &quot;C&quot;
    '--- 出力結果: A          B          C
End Sub</code></pre>



<p class="wp-block-paragraph">セミコロンは値を詰めて並べたいときに使います。カンマは14文字間隔のタブ位置に揃えるので、表のように整列させたいときに便利です。</p>



<p class="wp-block-paragraph">もう一つ覚えておきたいのが、<strong>行末のセミコロン</strong>です。</p>



<pre class="wp-block-code"><code>Sub DebugPrintNoBreak()
    Debug.Print &quot;合計: &quot;;
    Debug.Print 12345
    '--- 出力結果: 合計: 12345（1行にまとまる） ---
End Sub</code></pre>



<p class="wp-block-paragraph">行末にセミコロンを付けると改行されません。次のDebug.Printの出力が同じ行に続きます。</p>



<h3 class="wp-block-heading"><span id="toc10">ループ内で使う</span></h3>



<p class="wp-block-paragraph">Debug.Printが本領を発揮するのはループ処理です。MsgBoxだと繰り返しのたびにOKボタンを押さなければいけませんが、Debug.Printならまとめて確認できます。</p>



<pre class="wp-block-code"><code>Sub DebugPrintLoop()
    Dim i As Long      '--- ループカウンタ ---
    Dim ws As Worksheet '--- 対象シート ---
    Set ws = ActiveSheet

    For i = 2 To 10
        Debug.Print &quot;行&quot; &amp; i &amp; &quot;: &quot; &amp; ws.Cells(i, 1).Value
    Next i
End Sub</code></pre>



<p class="wp-block-paragraph">実行すると、イミディエイトウィンドウに以下のように出力されます。</p>



<pre class="wp-block-code"><code>行2: 田中
行3: 鈴木
行4: 佐藤
...</code></pre>



<p class="wp-block-paragraph">一覧で見られるので、「どの行にどんな値が入っているか」をすばやく把握できます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>イミディエイトウィンドウには約200行までしか保持されません。古い出力は上から順に消えていきます。大量のデータを確認したい場合はファイルへの書き出しも検討しましょう。また、1行あたりの最大文字数は1,023文字です。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc11">イミディエイトウィンドウを電卓として使う</span></h2>



<p class="wp-block-paragraph">Debug.Printはコード内に書くものですが、イミディエイトウィンドウには<strong>直接コマンドを打ち込む</strong>こともできます。これがとても便利なんです。</p>



<h3 class="wp-block-heading"><span id="toc12">?（クエスチョン）で即計算・即確認</span></h3>



<p class="wp-block-paragraph">イミディエイトウィンドウに <code>?</code> と入力してEnterを押すと、その場で式を評価して結果を返してくれます。<code>?</code> は <code>Debug.Print</code> の省略形です。</p>



<pre class="wp-block-code"><code>?1+2+3
 6

?Format(Now, &quot;yyyy/mm/dd&quot;)
2026/03/28

?Len(&quot;イミディエイトウィンドウ&quot;)
 12</code></pre>



<p class="wp-block-paragraph">VBAの関数をそのまま使えるので、ちょっとした計算や動作確認に最適です。電卓代わりに使っている方も多いですよ。</p>



<h3 class="wp-block-heading"><span id="toc13">マクロ実行中断後に変数値を調べる</span></h3>



<p class="wp-block-paragraph">ブレークポイントやStopでマクロを一時停止してみましょう。イミディエイトウィンドウから変数の中身を直接確認できます。</p>



<pre class="wp-block-code"><code>?myVariable
 256

?ws.Name
Sheet1</code></pre>



<p class="wp-block-paragraph">さらに、値を<strong>書き換える</strong>こともできます。</p>



<pre class="wp-block-code"><code>myVariable = 999</code></pre>



<p class="wp-block-paragraph">これを入力してEnterを押すと、変数の値がその場で変わります。「もしこの値だったらどうなるか」を試したいときに重宝します。そのまま F5 を押せば、書き換えた値で処理が再開されます。</p>



<h3 class="wp-block-heading"><span id="toc14">ワンライナーでシートを操作する</span></h3>



<p class="wp-block-paragraph">イミディエイトウィンドウからは、シートの操作もできます。わざわざマクロを書かなくても、1行で済む処理ならここで実行してしまいましょう。</p>



<pre class="wp-block-code"><code>Range(&quot;A1&quot;).Value = &quot;テスト&quot;

ActiveSheet.Name = &quot;集計結果&quot;

?Worksheets.Count
 3</code></pre>



<p class="wp-block-paragraph"><code>?</code> を付ければ戻り値が表示され、<code>?</code> なしならステートメントとして実行されます。プロシージャの呼び出しもできます。</p>



<pre class="wp-block-code"><code>Call MySub

MyFunction 100, 200</code></pre>



<p class="wp-block-paragraph">テスト用のプロシージャをサッと呼び出せるので、動作確認の効率がぐんと上がります。</p>



<h2 class="wp-block-heading"><span id="toc15">Debug.Assertでエラーを早期に検出する</span></h2>



<p class="wp-block-paragraph">Debugオブジェクトには、Printのほかにもう一つ <strong>Assert</strong> というメソッドがあります。Debug.Assertを使うと、「この条件は必ず成り立つはず」というチェックをコードに埋め込めます。</p>



<h3 class="wp-block-heading"><span id="toc16">Debug.Assertの書き方と動作</span></h3>



<p class="wp-block-paragraph">Debug.Assertには、True/Falseを返す式を渡します。</p>



<pre class="wp-block-code"><code>Sub AssertExample()
    Dim count As Long '--- 処理件数 ---
    count = WorksheetFunction.CountA(Range(&quot;A:A&quot;)) - 1

    '--- データが1件以上あることを保証 ---
    Debug.Assert count &gt; 0

    Debug.Print count &amp; &quot;件のデータを処理します&quot;
End Sub</code></pre>



<p class="wp-block-paragraph">渡した式が <strong>Trueのとき</strong> は何も起こりません。マクロはそのまま続行します。</p>



<p class="wp-block-paragraph"><strong>Falseのとき</strong> はマクロが一時停止し、ブレークモードに入ります。該当行が黄色くハイライトされるので、「ここで想定外の状態が起きた」とすぐ気づけます。</p>



<p class="wp-block-paragraph">注意点として、Debug.Assertは<strong>短絡評価をしません</strong>。たとえば以下の書き方は危険です。</p>



<pre class="wp-block-code"><code>'--- NG: objがNothingだとエラーになる ---
Debug.Assert Not obj Is Nothing And obj.Value &gt; 0

'--- OK: 条件を分けて書く ---
Debug.Assert Not obj Is Nothing
Debug.Assert obj.Value &gt; 0</code></pre>



<p class="wp-block-paragraph">条件が複数あるときは、1つずつ分けて書くのが安全です。</p>



<h3 class="wp-block-heading"><span id="toc17">Debug.PrintとAssertの使い分け</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>用途</th><th>使うメソッド</th><th>具体例</th></tr></thead><tbody><tr><td>値を確認したい</td><td>Debug.Print</td><td>ループ中の変数をモニタリング</td></tr><tr><td>前提条件を保証したい</td><td>Debug.Assert</td><td>データが0件でないことを保証</td></tr><tr><td>エラーの原因を追跡したい</td><td>Debug.Print</td><td>If文の分岐をトレースする</td></tr><tr><td>想定外の状態を即座に止めたい</td><td>Debug.Assert</td><td>引数がマイナスでないことを保証</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Debug.Printは「観察するため」、Debug.Assertは「守るため」と覚えておくとよいでしょう。どちらもコンパイル済みのコードからは除去されるため、本番環境のパフォーマンスに影響しません。</p>



<h2 class="wp-block-heading"><span id="toc18">デバッグウィンドウ3種の比較と使い分け</span></h2>



<p class="wp-block-paragraph">VBEにはイミディエイトウィンドウ以外にも、<strong>ローカルウィンドウ</strong>と<strong>ウォッチウィンドウ</strong>があります。この3つを使い分けると、デバッグの効率が大きく変わります。</p>



<h3 class="wp-block-heading"><span id="toc19">イミディエイト・ローカル・ウォッチの違い一覧</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>イミディエイト</th><th>ローカル</th><th>ウォッチ</th></tr></thead><tbody><tr><td>表示する情報</td><td>Debug.Printの出力 / 手動入力の結果</td><td>現スコープの全変数</td><td>指定した変数・式</td></tr><tr><td>操作のタイミング</td><td>実行中・中断中・停止中</td><td>中断中のみ</td><td>中断中のみ</td></tr><tr><td>情報の更新</td><td>手動（コードまたは入力）</td><td>ブレーク時に自動</td><td>ブレーク時に自動</td></tr><tr><td>値の書き換え</td><td>可能（直接入力）</td><td>可能（ダブルクリック）</td><td>不可</td></tr><tr><td>コード実行</td><td>可能（1行コマンド）</td><td>不可</td><td>不可</td></tr><tr><td>スコープまたぎ</td><td>可能</td><td>現スコープのみ</td><td>可能（条件ブレーク設定も可）</td></tr><tr><td>ショートカット</td><td>Ctrl + G</td><td>表示メニューから</td><td>表示メニューから</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">それぞれ詳しく知りたい方は、<a href="https://mashukabu.com/excel-vbe-local-window-explanation/">ローカルウィンドウの使い方</a>と<a href="https://mashukabu.com/excel-vbe-watch-window-explanation/">ウォッチウィンドウの使い方</a>の記事も参考にしてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc20">どのシーンでどれを使うか</span></h3>



<p class="wp-block-paragraph">迷ったときの目安をまとめます。</p>



<ul class="wp-block-list"><li><strong>「この変数、今いくつ？」をサッと調べたい</strong> → イミディエイトウィンドウで <code>?変数名</code></li><li><strong>プロシージャ内の変数を全部まとめて確認したい</strong> → ローカルウィンドウ</li><li><strong>特定の変数が条件を満たしたら自動停止させたい</strong> → ウォッチウィンドウ</li><li><strong>ループの中身を一覧で見たい</strong> → イミディエイトウィンドウで Debug.Print</li><li><strong>複数プロシージャにまたがる変数を追いかけたい</strong> → ウォッチウィンドウ</li></ul>



<p class="wp-block-paragraph">基本はイミディエイトウィンドウで十分です。「全変数を一覧したい」「条件ブレークを使いたい」など特別な目的があるときに、ローカルやウォッチを併用する考え方でOKです。</p>



<h2 class="wp-block-heading"><span id="toc21">実務シナリオ別の使い方</span></h2>



<p class="wp-block-paragraph">ここからは、実際の業務でよくある場面でのDebug.Print活用法を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc22">ループが途中で止まる原因を調べたい</span></h3>



<p class="wp-block-paragraph">ループが途中で終了してしまう場合、各ステップの値を出力すれば原因を特定しやすくなります。</p>



<pre class="wp-block-code"><code>Sub DebugLoopIssue()
    Dim ws As Worksheet    '--- 対象シート ---
    Dim lastRow As Long    '--- 最終行 ---
    Dim i As Long          '--- ループカウンタ ---
    Dim cellValue As Variant '--- セルの値 ---

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    Debug.Print &quot;最終行: &quot; &amp; lastRow

    For i = 2 To lastRow
        cellValue = ws.Cells(i, 1).Value
        Debug.Print &quot;行&quot; &amp; i &amp; &quot; 値=&quot; &amp; cellValue &amp; _
                    &quot; 型=&quot; &amp; TypeName(cellValue)

        '--- 空白行で処理終了 ---
        If IsEmpty(cellValue) Then
            Debug.Print &quot;★ 行&quot; &amp; i &amp; &quot;が空白のため終了&quot;
            Exit For
        End If

        '--- ここに本来の処理を書く ---
    Next i
End Sub</code></pre>



<p class="wp-block-paragraph">出力結果を見れば「何行目でどんな値だったか」「なぜループが終わったのか」がすぐ分かります。TypeNameで型も一緒に出力しているのがポイントです。数値に見える文字列が原因だった、というケースも見逃しません。</p>



<h3 class="wp-block-heading"><span id="toc23">If文が想定通り分岐しているか確認したい</span></h3>



<p class="wp-block-paragraph">条件分岐が複雑になると、どのルートを通ったのか分からなくなりがちです。各分岐にDebug.Printを仕込んで、通過ルートを可視化しましょう。</p>



<pre class="wp-block-code"><code>Sub DebugIfBranch()
    Dim sales As Long   '--- 売上金額 ---
    Dim rank As String   '--- 評価ランク ---
    Dim ws As Worksheet  '--- 対象シート ---
    Dim i As Long        '--- ループカウンタ ---
    Dim lastRow As Long  '--- 最終行 ---

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        sales = ws.Cells(i, 2).Value

        If sales &gt;= 1000000 Then
            rank = &quot;A&quot;
            Debug.Print &quot;行&quot; &amp; i &amp; &quot; → Aランク（売上: &quot; &amp; sales &amp; &quot;）&quot;
        ElseIf sales &gt;= 500000 Then
            rank = &quot;B&quot;
            Debug.Print &quot;行&quot; &amp; i &amp; &quot; → Bランク（売上: &quot; &amp; sales &amp; &quot;）&quot;
        Else
            rank = &quot;C&quot;
            Debug.Print &quot;行&quot; &amp; i &amp; &quot; → Cランク（売上: &quot; &amp; sales &amp; &quot;）&quot;
        End If

        ws.Cells(i, 3).Value = rank
    Next i
End Sub</code></pre>



<p class="wp-block-paragraph">イミディエイトウィンドウの出力を見れば、全行がどのランクに振り分けられたか一覧で確認できます。「100万以上なのにBランクになっている」といった不具合も、一目で発見できますよ。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/excel-vba-conditional-branch-explanation/">VBA If文の使い方</a>の記事も合わせて読むと、条件分岐の基本から復習できます。</p>



<h2 class="wp-block-heading"><span id="toc24">まとめ</span></h2>



<p class="wp-block-paragraph">イミディエイトウィンドウの使い方を振り返ります。</p>



<ul class="wp-block-list"><li><strong>Ctrl + G</strong> でVBE上に表示できる</li><li><strong>Debug.Print</strong> で変数値やメッセージを出力する</li><li>セミコロン（<code>;</code>）で直後出力、カンマ（<code>,</code>）でタブ区切り</li><li><strong>?（クエスチョン）</strong> で電卓のように即計算できる</li><li>ブレーク中に変数の値を確認・書き換えもできる</li><li><strong>Debug.Assert</strong> で前提条件のチェックを埋め込める</li><li>ローカル・ウォッチウィンドウと併用するとさらに効率アップ</li></ul>



<p class="wp-block-paragraph">MsgBoxでの確認から卒業するだけで、デバッグのスピードは格段に上がります。まずは普段のコードに <code>Debug.Print</code> を1行追加するところから始めてみてくださいね。</p>



<p class="wp-block-paragraph">VBAのスキルをさらに伸ばしたい方は、<a href="https://mashukabu.com/excel-vba-learning-roadmap/">VBAの学習順番ロードマップ</a>もぜひ参考にしてみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-vbe-immediate-window-explanation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
