<?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%82%A6%E3%82%A9%E3%83%83%E3%83%81%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>Tue, 09 Jun 2026 01:45:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</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>ExcelマクロのVBAデバッグ方法｜ブレークポイントから変数確認まで</title>
		<link>https://mashukabu.com/excel-vba-debug-breakpoint-step-execution/</link>
					<comments>https://mashukabu.com/excel-vba-debug-breakpoint-step-execution/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 01:45:55 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[ウォッチウィンドウ]]></category>
		<category><![CDATA[ステップ実行]]></category>
		<category><![CDATA[デバッグ]]></category>
		<category><![CDATA[ブレークポイント]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7888</guid>

					<description><![CDATA[VBAのマクロが動かないときに使うデバッグ方法を徹底解説。ブレークポイント（F9）でコードを一時停止し、ステップ実行（F8）で1行ずつ追う手順から、ローカル・ウォッチ・イミディエイトの3ウィンドウの使い分けまで、初心者でも迷わないフローチャート付きで説明します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">VBAでマクロを書き始めると、誰もが必ず「実行したのに動かない」「エラーは出ないのに結果がおかしい」という壁にぶつかります。コードを何度見直しても原因がわからず、<code>MsgBox</code> をあちこちに仕込んでは消して、を繰り返した経験はありませんか。</p>



<p class="wp-block-paragraph">その「とりあえず MsgBox」のやり方は、実はとても効率が悪いんです。原因の見当がついていない段階で当てずっぽうに値を表示しても、たいていは見当違いの場所を見ているだけです。そうして時間ばかりが溶けていきます。終わったら表示用のコードを消し忘れて、本番でいきなりメッセージが出る、なんて事故も起きがちですよね。</p>



<p class="wp-block-paragraph">VBEには、こうした調査を専用にこなす「デバッグツール」が最初から備わっています。ブレークポイントでコードを途中で止め、1行ずつ実行し、変数の中身をその場で確認する。この一連の流れを覚えるだけで、「動かない」の原因特定は驚くほど速くなりますよ。</p>



<p class="wp-block-paragraph">この記事では、ブレークポイント（F9）とステップ実行（F8）を軸に解説します。さらに、ローカル・ウォッチ・イミディエイトの3ウィンドウの使い分けまでを通しで紹介します。「症状からツールを選ぶフローチャート」と「エラーは出ないのに結果がずれる論理エラーの実践シナリオ」も用意しました。毎回 MsgBox を仕込むやり方から、今日で卒業しましょう。</p>



<p class="wp-block-paragraph">なお、本記事は Microsoft 365 / Excel 2021 / 2019 の VBE を前提にしています。メニュー名は日本語版Excelの表記に合わせていますが、お使いの環境で多少異なる場合は読み替えてくださいね。</p>




  <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">デバッグが必要な2パターン（エラーで止まる／結果がおかしい）</a></li><li><a href="#toc3" tabindex="0">MsgBoxだけに頼るデバッグの限界</a></li></ol></li><li><a href="#toc4" tabindex="0">デバッグ4ステップ・フローチャート｜症状別ツール選択ガイド</a><ol><li><a href="#toc5" tabindex="0">症状1：実行時エラーで止まる場合</a></li><li><a href="#toc6" tabindex="0">症状2：エラーは出ないが結果がおかしい（論理エラー）の場合</a></li><li><a href="#toc7" tabindex="0">症状3：無限ループ・処理が終わらない場合</a></li></ol></li><li><a href="#toc8" tabindex="0">ブレークポイントの設定と解除方法（F9）</a><ol><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">ステップ実行で1行ずつ処理を追う（F8）</a><ol><li><a href="#toc13" tabindex="0">ステップイン・ステップオーバー・ステップアウトの違い</a></li><li><a href="#toc14" tabindex="0">ステップ実行とブレークポイントの組み合わせ方</a></li></ol></li><li><a href="#toc15" tabindex="0">変数の中身を確認する3つのウィンドウ</a><ol><li><a href="#toc16" tabindex="0">ローカルウィンドウ｜全変数を一覧で確認</a></li><li><a href="#toc17" tabindex="0">ウォッチウィンドウ｜条件付き中断で特定変数を監視</a></li><li><a href="#toc18" tabindex="0">イミディエイトウィンドウ｜Debug.Printでその場確認</a></li></ol></li><li><a href="#toc19" tabindex="0">デバッグツール使い分け早見表</a></li><li><a href="#toc20" tabindex="0">実践シナリオ｜論理エラーを追う手順（合計行スキップ問題）</a><ol><li><a href="#toc21" tabindex="0">Step1：ブレークポイントでループ前に止める</a></li><li><a href="#toc22" tabindex="0">Step2：F8ステップ実行で処理を1行ずつ追う</a></li><li><a href="#toc23" tabindex="0">Step3：ローカルウィンドウでカウンタ変数を確認</a></li><li><a href="#toc24" tabindex="0">Step4：問題箇所の特定と修正</a></li></ol></li><li><a href="#toc25" tabindex="0">まとめ｜デバッグを習慣にして「動かない」を素早く解決しよう</a><ol><li><a href="#toc26" tabindex="0">各ツールの詳細は専門記事へ</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBAデバッグとは何か｜なぜ必要なのか</span></h2>



<p class="wp-block-paragraph">デバッグとは、ひとことで言えば「バグ（不具合）の原因を突き止めて直す作業」です。VBAにおいては、書いたコードがなぜ意図どおりに動かないのかを調査し、修正するまでの一連のプロセスを指します。</p>



<p class="wp-block-paragraph">ここで大事なのは、VBAのエラーには種類があり、種類によって対処の入り口が変わるという点です。Microsoftの公式分類では、VBA（Visual Basic）のエラーは次の3種類に分かれます。</p>



<ol class="wp-block-list"><li><strong>構文エラー（コンパイルエラー）</strong>: コードの書き方そのものが間違っているエラーです。実行前にVBEが検出します。</li><li><strong>実行時エラー</strong>: マクロを動かした途中で発生するエラーです。「実行時エラー 1004」などがこれにあたります。</li><li><strong>論理エラー</strong>: エラーメッセージは出ないのに、処理結果が意図と違うバグです。</li></ol>



<p class="wp-block-paragraph">構文エラーは実行する前にVBEが指摘してくれるので、比較的気づきやすい部類です。やっかいなのは残りの2つ、つまり「実行時エラーで止まる」場合と「論理エラーで結果がずれる」場合です。この記事のデバッグツールは、まさにこの2パターンの原因調査に効きます。</p>



<h3 class="wp-block-heading"><span id="toc2">デバッグが必要な2パターン（エラーで止まる／結果がおかしい）</span></h3>



<p class="wp-block-paragraph">デバッグツールを使う場面は、大きく2パターンに分けられます。この区別を意識しておくと、後で紹介するツール選びがぐっと楽になりますよ。</p>



<p class="wp-block-paragraph">1つ目は「実行時エラーで止まる」パターンです。マクロを実行すると赤い画面が出て、特定の行が黄色くハイライトされた状態で止まります。この黄色い行が、エラーが起きた場所です。</p>



<p class="wp-block-paragraph">2つ目は「エラーは出ないが結果がおかしい」パターン、いわゆる論理エラーです。マクロは最後まで普通に動くのに、合計が合わない、転記先が1行ずれている、といった症状が出ます。エラーが出ない分、どこが悪いのか見当をつけにくく、デバッグツールの真価が問われる場面です。</p>



<p class="wp-block-paragraph">止まる場合は「止まった場所」が手がかりになります。止まらない場合は「処理を1行ずつ追って、おかしくなる瞬間を捕まえる」必要があります。アプローチが違うので、まずは自分がどちらの状況かを見極めてくださいね。</p>



<p class="wp-block-paragraph">なお、実行時エラーの番号別の直し方（エラー13・1004・9など）については、<a href="https://mashukabu.com/vba-error-guide/">VBAマクロのエラー解決ガイド</a>で原因と修正コードをセットでまとめています。本記事の「調査ツールの使い方」と、エラーガイドの「番号別の直し方」は補完関係にあるので、あわせて読むと対応力が上がりますよ。</p>



<h3 class="wp-block-heading"><span id="toc3">MsgBoxだけに頼るデバッグの限界</span></h3>



<p class="wp-block-paragraph">VBAを始めたばかりの頃は、変数の中身を確認したいときに <code>MsgBox</code> を使う人が多いと思います。たとえば次のように書くわけです。</p>



<pre class="wp-block-code"><code>Sub MsgBoxデバッグの例()
    Dim i As Long
    Dim 合計 As Long

    For i = 1 To 10
        合計 = 合計 + Cells(i, 1).Value
        MsgBox &quot;i=&quot; &amp; i &amp; &quot; / 合計=&quot; &amp; 合計  '確認用に値を表示
    Next i
End Sub</code></pre>



<p class="wp-block-paragraph">このやり方でも値は確認できます。ただ、ループが10回まわれば10回ダイアログが出るので、そのたびにOKを押す手間がかかります。確認したい変数が増えるたびに <code>MsgBox</code> を書き足すことになり、コードがどんどん汚れていきます。</p>



<p class="wp-block-paragraph">さらに困るのが、消し忘れです。デバッグが終わったあとに削除し忘れると、本番運用中にいきなりメッセージボックスが出て処理が止まります。共有ファイルなら、他の人を巻き込んだ事故にもなりかねません。</p>



<p class="wp-block-paragraph">VBE標準のデバッグツールなら、コード本体に手を加えずに値を確認できます。確認用のコードを書かないので、消し忘れの事故も起きません。MsgBox方式から卒業する価値は十分にありますよ。</p>



<h2 class="wp-block-heading"><span id="toc4">デバッグ4ステップ・フローチャート｜症状別ツール選択ガイド</span></h2>



<p class="wp-block-paragraph">「ツールがたくさんあるのはわかったけど、結局どれから使えばいいの？」というのが、最初のつまずきポイントだと思います。そこで、症状からツールを選ぶ判断の流れを整理しました。</p>



<pre class="wp-block-code"><code>【デバッグ・ツール選択フローチャート】

(1) 症状を確認する
     │
     ├─ 赤い画面で止まる（実行時エラー）
     │        ↓
     │   止まった行と変数を見る
     │   → ローカルウィンドウで変数一覧を確認
     │   → エラー番号で原因を特定
     │
     ├─ エラーは出ないが結果がおかしい（論理エラー）
     │        ↓
     │   ブレークポイント(F9)で処理の手前に止める
     │   → ステップ実行(F8)で1行ずつ追う
     │   → ローカル/ウォッチで変数の変化を監視
     │
     └─ 処理が終わらない（無限ループ）
              ↓
          Ctrl+Break で強制中断
          → ステップ実行(F8)でループ条件を確認</code></pre>



<p class="wp-block-paragraph">このフローの肝は、「症状で入り口が決まる」という点です。止まるならまず止まった場所を見る、止まらないならブレークポイントで自分から止める。まずはこの大枠を頭に入れてくださいね。</p>



<p class="wp-block-paragraph">それぞれの症状について、もう少し具体的に見ていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc5">症状1：実行時エラーで止まる場合</span></h3>



<p class="wp-block-paragraph">実行時エラーが出ると、エラーメッセージのダイアログが表示され、「デバッグ」ボタンを押すと該当行が黄色くハイライトされます。この黄色い行が、エラーが起きた場所です。</p>



<p class="wp-block-paragraph">まずやるべきは、止まった行の周辺で使われている変数の中身を確認することです。ここで活躍するのがローカルウィンドウです。現在のプロシージャの全変数とその値が一覧で表示されるので、「想定外の値が入っている変数」を探します。</p>



<p class="wp-block-paragraph">たとえば、シート名を変数で指定していて「インデックスが有効範囲にありません（実行時エラー 9）」で止まったとします。このときローカルウィンドウを見れば、変数に想定と違うシート名が入っていた、というケースがすぐ見つかります。</p>



<p class="wp-block-paragraph">止まった場所と変数の中身、この2つがそろえば原因の大半は特定できます。エラー番号ごとの代表的な原因は<a href="https://mashukabu.com/vba-error-guide/">エラー解決ガイド</a>で確認してみてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc6">症状2：エラーは出ないが結果がおかしい（論理エラー）の場合</span></h3>



<p class="wp-block-paragraph">論理エラーは、エラーが出ない分だけ手強い相手です。マクロは正常終了するのに、合計が1件分足りない、転記先が1行ずれる、といった「結果のずれ」だけが残ります。</p>



<p class="wp-block-paragraph">この場合、エラーで止まってくれないので、自分から処理を止めにいく必要があります。手順はこうです。まずブレークポイント（F9）で怪しい処理の手前に止めます。次にステップ実行（F8）で1行ずつ進めながら、変数の値がおかしくなる瞬間を捕まえます。</p>



<p class="wp-block-paragraph">「どこで値がおかしくなるか」を一発で見つけたいときは、ウォッチウィンドウの条件付き中断も使えます。特定の変数が想定外の値になった瞬間に自動で止める、という芸当が可能です。詳しくは後半の実践シナリオで実演しますね。</p>



<p class="wp-block-paragraph">論理エラーは、エラーガイドのようなエラー番号別の対処では拾えない領域です。だからこそ、ステップ実行と変数確認の組み合わせが武器になりますよ。</p>



<h3 class="wp-block-heading"><span id="toc7">症状3：無限ループ・処理が終わらない場合</span></h3>



<p class="wp-block-paragraph">「実行ボタンを押したまま、いつまでも処理が終わらない」という症状もよくあります。多くの場合、<code>Do ～ Loop</code> や <code>For</code> の終了条件が満たされず、ループが回り続けているのが原因です。</p>



<p class="wp-block-paragraph">このときは、まず実行を止めなければ調査できません。<code>Ctrl + Break</code> を押すと、実行中のマクロを手動でブレークモードに切り替えられます。止まったら、ループのカウンタ変数や終了条件の変数をローカルウィンドウで確認します。</p>



<p class="wp-block-paragraph">たとえば、カウンタを増やすはずの行が抜けていて、条件が永遠に満たされないというパターンです。止めて変数を見れば、「カウンタがずっと同じ値のままだ」とすぐわかります。</p>



<p class="wp-block-paragraph">無限ループは「まず Ctrl+Break で止める」が合言葉です。止めてからステップ実行でループ条件を追えば、抜け出せない理由が見えてきますよ。</p>



<h2 class="wp-block-heading"><span id="toc8">ブレークポイントの設定と解除方法（F9）</span></h2>



<p class="wp-block-paragraph">ブレークポイントは、デバッグの出発点とも言える機能です。指定した行でコードの実行を一時停止させ、その時点の変数や状態をじっくり確認できるようにします。</p>



<h3 class="wp-block-heading"><span id="toc9">ブレークポイントの設定手順</span></h3>



<p class="wp-block-paragraph">ブレークポイントの設定方法は、公式に3通りあります。どれを使っても結果は同じなので、好きな方法で構いません。</p>



<ol class="wp-block-list"><li><strong>F9キー</strong>: 止めたい行にカーソルを置いて <code>F9</code> を押します（メニューでは「デバッグ」→「ブレークポイントの設定/解除」）。</li><li><strong>マージンバーをクリック</strong>: コードウィンドウ左端のグレーの帯（マージンインジケーターバー）をクリックします。</li><li><strong>ツールバーボタン</strong>: デバッグツールバーのボタンから設定します。</li></ol>



<p class="wp-block-paragraph">設定すると、その行が赤茶色にハイライトされ、左端に丸い印が表示されます。この状態でマクロを実行すると、ブレークポイントの行に到達した瞬間に処理が止まります。</p>



<pre class="wp-block-code"><code>Sub ブレークポイントの例()
    Dim i As Long
    Dim 合計 As Long

    For i = 1 To 10
        合計 = 合計 + Cells(i, 1).Value  ' ←この行にF9でブレークポイントを設定
    Next i

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



<p class="wp-block-paragraph">上の例では、合計を加算する行にブレークポイントを置いています。実行するとループの1回目でこの行の直前で止まり、変数の中身を確認できる状態になります。</p>



<h3 class="wp-block-heading"><span id="toc10">複数箇所への設定と一括クリアの方法</span></h3>



<p class="wp-block-paragraph">ブレークポイントは複数の行に同時に設定できます。処理の分岐ごとに置いておけば、「どのルートを通ったか」を確認するのに便利です。</p>



<p class="wp-block-paragraph">1行だけ解除したいときは、その行で再度 <code>F9</code> を押すか、マージンバーの丸印をもう一度クリックします。設定と解除が同じ操作なので、迷わないと思います。</p>



<p class="wp-block-paragraph">すべてのブレークポイントを一括で消したいときは、<code>Ctrl + Shift + F9</code> を押します（メニューでは「デバッグ」→「すべてのブレークポイントの解除」）。あちこちに設定して散らかったときは、これでまとめてリセットできますよ。</p>



<p class="wp-block-paragraph">なお、ブレークポイントは1つ知っておくべき仕様があります。<strong>ファイルを保存しても保持されません</strong>。Excelを閉じて次回起動すると、ブレークポイントはすべて消えています。「保存したのに次の日には消えていた」と驚かないようにしてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc11">ブレークポイントを使うべきシーン</span></h3>



<p class="wp-block-paragraph">ブレークポイントが活きるのは、「処理のこのあたりが怪しい」と当たりがついている場面です。怪しい処理の手前に止めておけば、そこまでは一気に実行し、肝心の部分だけをじっくり調べられます。</p>



<p class="wp-block-paragraph">逆に、どこが怪しいか全く見当がつかないときは、プロシージャの先頭にブレークポイントを置き、そこからステップ実行で順番に追っていく使い方になります。次の章で解説するステップ実行と組み合わせるのが王道です。</p>



<p class="wp-block-paragraph">もう1つ、コード中に書き込むタイプの停止方法として <code>Stop</code> ステートメントもあります。これはブレークポイントと同じくブレークモードに切り替わりますが、コードに書いた文字なので保存後も残ります。便利な反面、デバッグが終わったら必ず削除しないと本番で止まってしまうので、扱いには注意してくださいね。</p>



<h2 class="wp-block-heading"><span id="toc12">ステップ実行で1行ずつ処理を追う（F8）</span></h2>



<p class="wp-block-paragraph">ブレークポイントで処理を止めたら、次はステップ実行の出番です。ステップ実行とは、コードを1行ずつ実行しながら、各行で何が起きているかを目で追っていく操作のことです。</p>



<p class="wp-block-paragraph">ブレークモードで <code>F8</code> を押すと、ハイライトされている行が1行だけ実行され、次の行に黄色いハイライトが移ります。これを繰り返すことで、処理の流れと変数の変化を1行単位で観察できます。</p>



<h3 class="wp-block-heading"><span id="toc13">ステップイン・ステップオーバー・ステップアウトの違い</span></h3>



<p class="wp-block-paragraph">ステップ実行には、似たような名前のコマンドが3つあります。違いを押さえておくと、調査がぐっと速くなりますよ。</p>



<ul class="wp-block-list"><li><strong>ステップイン（F8）</strong>: 最も基本のステップ実行です。1行ずつ実行し、別のプロシージャを呼び出している行ではその中にも入っていきます。最も細かく追える反面、呼び出し先が長いと時間がかかります。</li><li><strong>ステップオーバー（Shift+F8）</strong>: 呼び出し先のプロシージャを1ステップとしてまとめて実行し、中には入りません。「このサブプロシージャは正しく動くと確信している」ときに使います。</li><li><strong>ステップアウト（Ctrl+Shift+F8）</strong>: 今いるプロシージャの残りを一気に実行し、呼び出し元の次の行に戻ります。「中に入りすぎたので、ここはもう抜けたい」ときに便利です。</li></ul>



<p class="wp-block-paragraph">さらに、<code>Ctrl + F8</code>（カーソル行の前まで実行）も覚えておくと役立ちます。大きなループを途中まで飛ばしたいとき、見たい行にカーソルを置いてこれを押せば、そこまで一気に進めますよ。</p>



<pre class="wp-block-code"><code>Sub ステップ実行の親プロシージャ()
    Dim 結果 As Long
    結果 = 二乗を計算(5)    ' ←F8でこの行に来たとき、F8なら関数の中へ／Shift+F8なら入らない
    MsgBox 結果
End Sub

Function 二乗を計算(n As Long) As Long
    二乗を計算 = n * n      ' 呼び出し先の中身
End Function</code></pre>



<p class="wp-block-paragraph">上の例で、<code>結果 = 二乗を計算(5)</code> の行で <code>F8</code>（ステップイン）を押すと <code>二乗を計算</code> 関数の中に入ります。<code>Shift + F8</code>（ステップオーバー）を押すと、関数の中身を一気に実行して <code>MsgBox</code> の行に進みます。</p>



<h3 class="wp-block-heading"><span id="toc14">ステップ実行とブレークポイントの組み合わせ方</span></h3>



<p class="wp-block-paragraph">ステップ実行とブレークポイントは、セットで使うと真価を発揮します。基本の流れは、「ブレークポイントで怪しい場所まで一気に進み、そこからステップ実行で細かく追う」というものです。</p>



<p class="wp-block-paragraph">たとえば、500行のデータを処理するマクロで、300行目あたりから結果がずれているとします。最初の1行目からF8で追っていたら、300回もF8を押さなければなりません。これは現実的ではないですよね。</p>



<p class="wp-block-paragraph">そこで、怪しい処理の手前にブレークポイントを置き、<code>F5</code>（実行/継続）で一気にそこまで進めます。到達したらF8に切り替えて、1行ずつ慎重に追っていきます。「ざっくり飛ばして、肝心な部分だけ細かく見る」という緩急が、効率的なデバッグのコツですよ。</p>



<p class="wp-block-paragraph">なお、調査の途中でもう最後まで実行してよいと判断したら、<code>F5</code> を押せばブレークモードから通常実行に戻ります。止めて、追って、再開して、という操作をテンポよく切り替えてみてくださいね。</p>



<h2 class="wp-block-heading"><span id="toc15">変数の中身を確認する3つのウィンドウ</span></h2>



<p class="wp-block-paragraph">処理を止めたり1行ずつ追ったりできるようになったら、次は「変数の中身をどう見るか」です。VBEには変数を確認するためのウィンドウが3つあり、それぞれ得意分野が違います。</p>



<p class="wp-block-paragraph">どのウィンドウもメニューの「表示」から開けます。VBEの画面構成そのものに不安がある方は、<a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBEの画面の見方を図解で解説した記事</a>で各ウィンドウの位置を先に確認しておくと、この先の説明が頭に入りやすいですよ。</p>



<h3 class="wp-block-heading"><span id="toc16">ローカルウィンドウ｜全変数を一覧で確認</span></h3>



<p class="wp-block-paragraph">ローカルウィンドウは、現在実行中のプロシージャ内のすべての変数とその値を、一覧で表示してくれるウィンドウです。「表示」→「ローカルウィンドウ」で開けます。</p>



<p class="wp-block-paragraph">最大の強みは、何も設定しなくても全変数がまとめて見える点です。ブレークモードで開いておけば、ステップ実行で1行進むたびに、各変数の値が自動で更新されます。「どの変数がいつ変わったか」を俯瞰するのにうってつけです。</p>



<p class="wp-block-paragraph">別のプロシージャに処理が移ると、表示内容も自動でそのプロシージャの変数に切り替わります。配列やオブジェクト変数は左の「+」を展開すると、中身を階層で確認できます。</p>



<p class="wp-block-paragraph">「とりあえず変数の状況を把握したい」ときは、まずローカルウィンドウを開く。これが基本の動きになります。より詳しい使い方は<a href="https://mashukabu.com/excel-vbe-local-window-explanation/">ローカルウィンドウの解説記事</a>にまとめているので、あわせて読んでみてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc17">ウォッチウィンドウ｜条件付き中断で特定変数を監視</span></h3>



<p class="wp-block-paragraph">ウォッチウィンドウは、「特定の変数や式」を狙い撃ちで監視するためのウィンドウです。ローカルウィンドウが全部を見せるのに対し、こちらは見たいものだけを登録して追えます。</p>



<p class="wp-block-paragraph">式を登録するには、コードウィンドウで式を選択してウォッチウィンドウにドラッグするか、メニューの「デバッグ」→「ウォッチ式の追加」ダイアログを使います。登録した式は、ブレークモードに入るたびに最新の値へ更新されます。</p>



<p class="wp-block-paragraph">ウォッチウィンドウの強力なところは、「ウォッチの種類」を3つから選べる点です。</p>



<ol class="wp-block-list"><li><strong>ウォッチ式</strong>: 値を表示するだけのタイプです。指定した変数や式の現在値を見たいときに使います。</li><li><strong>値がTrueのときに中断</strong>: 式の結果がTrue（またはゼロ以外）になった瞬間に、自動でブレークモードに入ります。たとえば <code>i > 100</code> を登録すれば、iが100を超えた瞬間に止まります（文字列の式には指定できません）。</li><li><strong>値が変化したときに中断</strong>: 監視している式の値が変わった瞬間に止まります。「この変数が書き換わるのはどこだ」を探すのに最適です。</li></ol>



<p class="wp-block-paragraph">論理エラーで「特定の値になった瞬間を捕まえたい」ときは、この条件付き中断が圧倒的に速いです。1行ずつF8で追わなくても、条件が成立した瞬間だけVBAが止めてくれます。</p>



<p class="wp-block-paragraph">1つ注意点があります。ウォッチ式の監視範囲（コンテキスト）には「すべてのプロシージャ」「すべてのモジュール」も選べます。ただし範囲を広げると、全ステートメントの後で式が評価されるため、実行速度が大きく落ちます。なるべく特定のプロシージャを指定するのがコツです。3種類のウォッチの詳しい使い分けは<a href="https://mashukabu.com/excel-vbe-watch-window-explanation/">ウォッチウィンドウの解説記事</a>で掘り下げているので、条件付き中断を本格的に使いたい方は読んでみてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc18">イミディエイトウィンドウ｜Debug.Printでその場確認</span></h3>



<p class="wp-block-paragraph">イミディエイトウィンドウは、その場でコードや式を実行したり、値を出力したりできる対話型のウィンドウです。「表示」→「イミディエイトウィンドウ」で開きます。</p>



<p class="wp-block-paragraph">使い方の中心は <code>Debug.Print</code> です。コードの中にこの命令を書いておくと、指定した内容がイミディエイトウィンドウに出力されます。<code>MsgBox</code> と違ってダイアログが出ないので、ループ内で何度呼んでも実行が止まりません。</p>



<pre class="wp-block-code"><code>Sub DebugPrintの例()
    Dim i As Long
    Dim 合計 As Long

    For i = 1 To 5
        合計 = 合計 + i
        Debug.Print &quot;i=&quot; &amp; i &amp; &quot; / 合計=&quot; &amp; 合計  'イミディエイトウィンドウに出力
    Next i
End Sub</code></pre>



<p class="wp-block-paragraph">このコードを実行すると、イミディエイトウィンドウに5行分のログが並びます。ループの各回でどう値が変化したかを、後からまとめて読み返せるのが利点です。MsgBoxのように毎回OKを押す必要もありません。</p>



<p class="wp-block-paragraph">さらに、ブレークモードで止まっているときは、ウィンドウに直接 <code>? 変数名</code> と打ち込めば、その変数の現在値をその場で表示できます。<code>Debug</code> オブジェクトにはもう1つ <code>Debug.Assert</code> があり、条件式がFalseのときだけ自動でブレークさせる、という使い方もできます。</p>



<p class="wp-block-paragraph">ログを残して後から追うならイミディエイトウィンドウ、というのが基本の役割です。<code>Debug.Print</code> の活用法は<a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">イミディエイトウィンドウの解説記事</a>でさらに詳しく紹介していますよ。</p>



<h2 class="wp-block-heading"><span id="toc19">デバッグツール使い分け早見表</span></h2>



<p class="wp-block-paragraph">ここまで紹介してきたツールを、1つの表にまとめました。「いつ使う」「何がわかる」「ショートカット」の3つの軸で並べています。迷ったときの早見表として使ってくださいね。</p>



<figure class="wp-block-table"><table><thead><tr><th>ツール</th><th>いつ使う</th><th>何がわかる／何ができる</th><th>ショートカット</th></tr></thead><tbody><tr><td>ブレークポイント</td><td>怪しい場所で実行を止めたいとき</td><td>指定行で停止し、その時点の状態を確認できる</td><td>F9（設定/解除）</td></tr><tr><td>ブレークポイント全解除</td><td>設定が散らかったとき</td><td>すべての停止点をまとめて消せる</td><td>Ctrl+Shift+F9</td></tr><tr><td>ステップイン</td><td>1行ずつ細かく追いたいとき</td><td>呼び出し先の中にも入って実行する</td><td>F8</td></tr><tr><td>ステップオーバー</td><td>呼び出し先を信頼して飛ばすとき</td><td>サブプロシージャを1単位として実行</td><td>Shift+F8</td></tr><tr><td>ステップアウト</td><td>入った関数から早く抜けたいとき</td><td>今の関数を一気に終え呼び出し元へ戻る</td><td>Ctrl+Shift+F8</td></tr><tr><td>カーソル行まで実行</td><td>途中まで一気に進めたいとき</td><td>カーソル位置まで実行して停止</td><td>Ctrl+F8</td></tr><tr><td>実行/継続</td><td>ブレークモードから再開するとき</td><td>次の停止点または最後まで実行</td><td>F5</td></tr><tr><td>手動中断</td><td>無限ループを止めたいとき</td><td>実行中のマクロをブレークモードへ</td><td>Ctrl+Break</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>Debug.Printの出力と式の即時実行</td><td>（表示メニュー）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ざっくりした覚え方としては、止めるのがブレークポイントとCtrl+Break、進めるのがF8系とF5、見るのが3つのウィンドウ、という3グループです。この3つの役割で頭の中を整理しておくと、実際の調査でも手が動きやすくなりますよ。</p>



<h2 class="wp-block-heading"><span id="toc20">実践シナリオ｜論理エラーを追う手順（合計行スキップ問題）</span></h2>



<p class="wp-block-paragraph">ここからは、実際の論理エラーをデバッグツールで追ってみましょう。題材は実務でも頻出する「合計が合わない」問題です。A1からA10に数値が入っていて、その合計を求めるマクロを想定します。</p>



<pre class="wp-block-code"><code>Sub 合計を計算する()
    Dim i As Long
    Dim 合計 As Long
    合計 = 0

    For i = 2 To 10           ' ←本当は 1 To 10 にすべきところを 2 から始めてしまった
        合計 = 合計 + Cells(i, 1).Value
    Next i

    Range(&quot;C1&quot;).Value = 合計
End Sub</code></pre>



<p class="wp-block-paragraph">このマクロ、エラーは一切出ません。ところが、A1の値が合計に含まれず、結果が1行分だけ少なくなります。ぱっと見ではコードも自然なので、原因に気づきにくい典型的な論理エラーです。これをデバッグツールで追っていきます。</p>



<h3 class="wp-block-heading"><span id="toc21">Step1：ブレークポイントでループ前に止める</span></h3>



<p class="wp-block-paragraph">まず、ループが始まる手前に止めます。<code>合計 = 0</code> の行か、<code>For</code> の行にカーソルを置いて <code>F9</code> を押し、ブレークポイントを設定します。</p>



<p class="wp-block-paragraph">ブレークポイントを置いたら、<code>F5</code> でマクロを実行します。すると、設定した行の直前で処理が止まり、ブレークモードに入ります。これでループに入る前の状態を、落ち着いて観察できる準備が整いました。</p>



<p class="wp-block-paragraph">論理エラーは「処理が進むにつれて値がずれていく」ことが多いので、ずれる前のスタート地点から見るのが鉄則です。いきなり結果を見ても原因はわからないので、手前で止めるところから始めてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc22">Step2：F8ステップ実行で処理を1行ずつ追う</span></h3>



<p class="wp-block-paragraph">止まったら、<code>F8</code>（ステップイン）に切り替えて1行ずつ進めます。<code>For i = 2 To 10</code> の行を実行した瞬間に、変数 <code>i</code> に初期値が入ります。ここが今回の調査の山場です。</p>



<p class="wp-block-paragraph">F8でループの中に入ると、<code>合計 = 合計 + Cells(i, 1).Value</code> が実行されます。ここで <code>Cells(i, 1)</code> がどのセルを指しているかを意識しながら進めます。1回目のループで参照しているのはA1なのか、それともA2なのか。これを次のステップで確認します。</p>



<p class="wp-block-paragraph">ステップ実行のいいところは、頭の中の「こう動くはず」と、実際の動きを照らし合わせられる点です。思い込みと現実のズレが見えた瞬間が、バグ発見の瞬間ですよ。</p>



<h3 class="wp-block-heading"><span id="toc23">Step3：ローカルウィンドウでカウンタ変数を確認</span></h3>



<p class="wp-block-paragraph">ステップ実行と並行して、ローカルウィンドウを開いておきます。「表示」→「ローカルウィンドウ」で表示できます。ここに変数 <code>i</code> と <code>合計</code> の現在値が出ています。</p>



<p class="wp-block-paragraph"><code>For</code> の行を実行した直後にローカルウィンドウを見ると、<code>i</code> の値が <code>2</code> になっているはずです。ここで「あれ、1回目なのに i が 2 から始まっている」と気づけます。本来1行目（A1）から足したいのに、ループが2行目から始まっているわけです。</p>



<p class="wp-block-paragraph">さらにF8を進めて、<code>合計</code> がどう増えていくかも追えます。最終的に合計がA2からA10までの和になっており、A1の分だけ足りていないことが確認できます。これで「ループの開始位置が原因だ」とはっきりしました。</p>



<p class="wp-block-paragraph">変数の一覧をリアルタイムで見られるのがローカルウィンドウの強みです。<code>i</code> が想定と違う値だったこの瞬間こそ、デバッグの当たりですよ。</p>



<h3 class="wp-block-heading"><span id="toc24">Step4：問題箇所の特定と修正</span></h3>



<p class="wp-block-paragraph">原因が特定できたら、修正は簡単です。ループの開始値を <code>2</code> から <code>1</code> に直すだけです。</p>



<pre class="wp-block-code"><code>Sub 合計を計算する()
    Dim i As Long
    Dim 合計 As Long
    合計 = 0

    For i = 1 To 10           ' 開始値を 1 に修正してA1から合計する
        合計 = 合計 + Cells(i, 1).Value
    Next i

    Range(&quot;C1&quot;).Value = 合計
End Sub</code></pre>



<p class="wp-block-paragraph">修正したら、ブレークポイントを <code>F9</code> で解除（または <code>Ctrl + Shift + F9</code> で全解除）して、もう一度実行します。今度はA1からA10まで正しく合計され、結果が合うはずです。</p>



<p class="wp-block-paragraph">この一連の流れ、ポイントは「ブレークポイントで止める→F8で追う→ローカルウィンドウで変数を見る」の3点セットです。論理エラーは原因が見えにくいですが、この手順なら確実に「おかしくなる瞬間」を捕まえられます。最初は時間がかかっても、慣れれば数分で終わるようになりますよ。</p>



<p class="wp-block-paragraph">なお、今回はループの開始位置という単純なミスでしたが、もっと複雑なケースで「特定の値になった瞬間に止めたい」ときは、Step2のF8連打の代わりにウォッチウィンドウの条件付き中断を使うと一気に楽になります。あわせて覚えておいてくださいね。</p>



<h2 class="wp-block-heading"><span id="toc25">まとめ｜デバッグを習慣にして「動かない」を素早く解決しよう</span></h2>



<p class="wp-block-paragraph">VBAのデバッグツールについて、ブレークポイントとステップ実行を軸に、3つのウィンドウの使い分けまで解説してきました。最後に要点を振り返っておきます。</p>



<ul class="wp-block-list"><li><strong>症状でアプローチが決まる</strong>: エラーで止まるなら止まった場所を見る、結果がおかしいならブレークポイントで自分から止めて追う。</li><li><strong>止める・進める・見るの3グループ</strong>: 止めるのがブレークポイント（F9）とCtrl+Break、進めるのがF8系とF5、見るのが3ウィンドウ。</li><li><strong>論理エラーは3点セットで追う</strong>: ブレークポイントで止め、F8で1行ずつ進め、ローカルウィンドウで変数を確認する。</li></ul>



<p class="wp-block-paragraph">このやり方が身につけば、これまで <code>MsgBox</code> を仕込んで消してを繰り返していた時間が、まるごと節約できます。「動かない」に出くわしたとき、慌てずに原因を特定できるようになりますよ。</p>



<h3 class="wp-block-heading"><span id="toc26">各ツールの詳細は専門記事へ</span></h3>



<p class="wp-block-paragraph">この記事は、デバッグツール全体の地図のような位置づけです。それぞれのツールには、ここで触れきれなかった便利な機能がまだあります。深く使いこなしたいときは、次の専門記事も読んでみてくださいね。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-vbe-local-window-explanation/">VBAローカルウィンドウの使い方</a>: 全変数を一覧で確認する基本ツールの詳細</li><li><a href="https://mashukabu.com/excel-vbe-watch-window-explanation/">VBAウォッチウィンドウの使い方</a>: 3種類のウォッチと条件付き中断を深掘り</li><li><a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">VBAイミディエイトウィンドウの使い方</a>: Debug.Printを使ったログ出力デバッグ</li><li><a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBEの画面の見方を図解で解説</a>: 各ウィンドウの位置と役割の基礎</li></ul>



<p class="wp-block-paragraph">また、実行時エラーで止まったときは<a href="https://mashukabu.com/vba-error-guide/">VBAマクロのエラー解決ガイド</a>でエラー番号別の直し方を確認できます。そもそもエラーで止まらないようにコードを設計したい場合は、<a href="https://mashukabu.com/vba-error-handling-complete-guide/">VBAのエラーハンドリング完全ガイド</a>で <code>On Error</code> 構文の使い分けを学べますよ。</p>



<p class="wp-block-paragraph">デバッグは、最初こそ面倒に感じるかもしれません。ですが一度フローが身につくと、「動かない」が「すぐ直せる」に変わります。今日紹介した手順を、次にマクロが動かなかったときにぜひ試してみてくださいね。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-vba-debug-breakpoint-step-execution/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VBAウォッチウィンドウの使い方｜3種類のウォッチで条件付きデバッグ</title>
		<link>https://mashukabu.com/excel-vbe-watch-window-explanation/</link>
					<comments>https://mashukabu.com/excel-vbe-watch-window-explanation/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 28 Jan 2022 13:17:05 +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=821</guid>

					<description><![CDATA[VBAウォッチウィンドウの使い方を初心者向けに解説。表示方法からウォッチ式の追加、3種類のウォッチ（式ウォッチ・Trueで中断・値変更で中断）、ローカルウィンドウとの違い、実務で役立つ活用テクニックまで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">VBAでマクロを作っていて「この変数、いつ値が変わったんだろう？」と悩んだことはありませんか。</p>



<p class="wp-block-paragraph">Debug.Printで確認するのもいいけれど、ループが何百回もまわる処理では追いきれないですよね。ブレークポイントで止めても、毎回同じ場所で止まるだけで「特定の条件のときだけ見たい」には対応できません。</p>



<p class="wp-block-paragraph">そんなときに頼りになるのが<strong>ウォッチウィンドウ</strong>です。この記事では、ウォッチウィンドウの表示方法から3種類のウォッチの使い分け、実務で役立つテクニックまで解説します。</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></ol></li><li><a href="#toc3" tabindex="0">VBEの起動とウォッチウィンドウの表示方法</a><ol><li><a href="#toc4" tabindex="0">VBE（Visual Basic Editor）の開き方</a></li><li><a href="#toc5" tabindex="0">ウォッチウィンドウの表示手順</a></li></ol></li><li><a href="#toc6" tabindex="0">ウォッチ式の追加方法</a><ol><li><a href="#toc7" tabindex="0">メニューから追加する</a></li><li><a href="#toc8" tabindex="0">ドラッグで追加する</a></li><li><a href="#toc9" tabindex="0">右クリックメニューから追加する</a></li></ol></li><li><a href="#toc10" tabindex="0">ウォッチウィンドウの3種類のウォッチ</a><ol><li><a href="#toc11" tabindex="0">式ウォッチ（デフォルト）</a></li><li><a href="#toc12" tabindex="0">式がTrueのときに中断</a></li><li><a href="#toc13" tabindex="0">値が変更されたときに中断</a></li><li><a href="#toc14" tabindex="0">3種類の使い分け早見表</a></li></ol></li><li><a href="#toc15" tabindex="0">実務で役立つ活用テクニック</a><ol><li><a href="#toc16" tabindex="0">オブジェクトのプロパティを展開して確認する</a></li><li><a href="#toc17" tabindex="0">配列変数をウォッチウィンドウで確認する</a></li><li><a href="#toc18" tabindex="0">式を使った高度な監視</a></li><li><a href="#toc19" tabindex="0">ウォッチ式の編集と削除</a></li><li><a href="#toc20" tabindex="0">イミディエイトウィンドウと組み合わせる</a></li><li><a href="#toc21" tabindex="0">実務シナリオ別：ウォッチウィンドウが威力を発揮する場面</a></li></ol></li><li><a href="#toc22" tabindex="0">ウォッチウィンドウのよくあるトラブルと対処法</a></li><li><a href="#toc23" tabindex="0">まとめ</a><ol><li><a href="#toc24" tabindex="0">あわせて読みたい</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）に搭載されたデバッグ用のウィンドウです。指定した<a href="https://mashukabu.com/excel-vba-variable-explanation/">変数</a>やプロパティの値をリアルタイムで監視できます。</p>



<p class="wp-block-paragraph">「ウォッチ（Watch）」は英語で「監視する」という意味です。名前のとおり、マクロの実行中に変数の動きを見張ってくれます。</p>



<p class="wp-block-paragraph">主にできることをまとめると、次のとおりです。</p>



<figure class="wp-block-table"><table><thead><tr><th>できること</th><th>使う場面</th></tr></thead><tbody><tr><td>変数やプロパティの値をリアルタイム表示</td><td>ループ中に値の変化を追いたいとき</td></tr><tr><td>条件を満たしたら自動で一時停止</td><td>特定の値になった瞬間を捉えたいとき</td></tr><tr><td>値が変わった瞬間に自動で一時停止</td><td>いつ値が変わるか分からないとき</td></tr><tr><td>オブジェクトのプロパティを展開表示</td><td>RangeやWorksheetの中身を確認したいとき</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">最大の特徴は「<strong>条件を指定して自動停止</strong>」ができる点です。これはVBEのデバッグツールの中でウォッチウィンドウだけが持つ機能です。VBEの画面全体の構成については、<a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBEの画面の見方を図解で解説</a>をあわせてご覧ください。</p>



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



<p class="wp-block-paragraph">VBEには3つのデバッグウィンドウがあります。それぞれの特徴を比較表で整理しておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>ウォッチウィンドウ</th><th><a href="https://mashukabu.com/excel-vbe-local-window-explanation/">ローカルウィンドウ</a></th><th><a href="https://mashukabu.com/excel-vbe-immediate-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>



<p class="wp-block-paragraph">ローカルウィンドウは「全部見せてくれるけど、指定できない」タイプです。一方、ウォッチウィンドウは「見たいものだけを条件付きで監視できる」のが強みです。</p>



<h2 class="wp-block-heading"><span id="toc3">VBEの起動とウォッチウィンドウの表示方法</span></h2>



<p class="wp-block-paragraph">ウォッチウィンドウを使うには、まずVBEを開く必要があります。</p>



<h3 class="wp-block-heading"><span id="toc4">VBE（Visual Basic Editor）の開き方</span></h3>



<p class="wp-block-paragraph">VBEを開く方法は2つあります。</p>



<ul class="wp-block-list"><li><strong>ショートカットキー</strong>: Alt + F11 を押す（最速の方法です）</li><li><strong>リボンから開く</strong>: 「開発」タブ →「Visual Basic」をクリック</li></ul>



<p class="wp-block-paragraph">「開発」タブが表示されていない場合は、次の手順で追加してください。</p>



<ol class="wp-block-list"><li>「ファイル」タブ →「オプション」を開きます</li><li>「リボンのユーザー設定」を選びます</li><li>右側の一覧で「開発」にチェックを入れます</li><li>「OK」をクリックします</li></ol>



<h3 class="wp-block-heading"><span id="toc5">ウォッチウィンドウの表示手順</span></h3>



<p class="wp-block-paragraph">ウォッチウィンドウはデフォルトでは表示されていません。次の手順で表示します。</p>



<p class="wp-block-paragraph">VBEの画面上部にある「<strong>表示</strong>」メニューをクリックし、「<strong>ウォッチ ウィンドウ</strong>」を選択します。VBE画面の下部にウォッチウィンドウが表示されます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>一度表示すれば、VBEを閉じるまでウォッチウィンドウは表示されたままです。毎回メニューから開く必要はありません。</p></blockquote>



<p class="wp-block-paragraph">なお、イミディエイトウィンドウにはCtrl + Gというショートカットがあります。しかしウォッチウィンドウにはデフォルトのショートカットキーが割り当てられていません。メニューからの表示方法を覚えておきましょう。</p>



<h2 class="wp-block-heading"><span id="toc6">ウォッチ式の追加方法</span></h2>



<p class="wp-block-paragraph">ウォッチウィンドウを表示しただけでは、中身は空の状態です。監視したい変数やプロパティを「ウォッチ式」として追加しましょう。追加する方法は3つあります。</p>



<h3 class="wp-block-heading"><span id="toc7">メニューから追加する</span></h3>



<ol class="wp-block-list"><li>VBEのメニューバーから「<strong>デバッグ</strong>」をクリックします</li><li>「<strong>ウォッチ式の追加</strong>」を選択します</li><li>ダイアログが表示されるので「<strong>式</strong>」欄に監視したい変数名を入力します</li><li>「OK」をクリックすると、ウォッチウィンドウに追加されます</li></ol>



<p class="wp-block-paragraph">たとえば、変数 <code>i</code> を監視したいなら「式」欄に <code>i</code> と入力するだけでOKです。</p>



<h3 class="wp-block-heading"><span id="toc8">ドラッグで追加する</span></h3>



<p class="wp-block-paragraph">コード上の変数名をマウスで選択して、ウォッチウィンドウにドラッグ&#038;ドロップする方法です。ダイアログを開かなくていいので、複数の変数をまとめて追加したいときに便利です。</p>



<h3 class="wp-block-heading"><span id="toc9">右クリックメニューから追加する</span></h3>



<p class="wp-block-paragraph">コード上で監視したい変数名にカーソルを置いて右クリックします。「<strong>ウォッチ式の追加</strong>」を選択すると、変数名が「式」欄に入った状態でダイアログが開きます。そのままOKを押すだけなので手軽です。</p>



<h2 class="wp-block-heading"><span id="toc10">ウォッチウィンドウの3種類のウォッチ</span></h2>



<p class="wp-block-paragraph">ウォッチ式を追加するとき、「ウォッチの種類」を選べます。この設定がウォッチウィンドウの真価を発揮するポイントです。</p>



<h3 class="wp-block-heading"><span id="toc11">式ウォッチ（デフォルト）</span></h3>



<p class="wp-block-paragraph">「<strong>式ウォッチ</strong>」は、指定した変数やプロパティの現在値をリアルタイムで表示するモードです。ウォッチ式を追加すると、デフォルトでこの設定になります。</p>



<p class="wp-block-paragraph">マクロをステップ実行（F8）しながら、値がどう変化するかを確認するのに使います。</p>



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



<p class="wp-block-paragraph">変数 <code>i</code> と <code>total</code> をウォッチ式に追加してみましょう。F8でステップ実行するたびに、値が更新されていく様子を確認できます。</p>



<h3 class="wp-block-heading"><span id="toc12">式がTrueのときに中断</span></h3>



<p class="wp-block-paragraph">「<strong>式がTrueのときに中断</strong>」は、指定した条件が成立した瞬間に自動でマクロを一時停止するモードです。</p>



<p class="wp-block-paragraph">たとえば「<code>i = 50</code>」という条件を設定しておきます。<a href="https://mashukabu.com/how-to-use-do-loop/">Do Loopなどのループ処理</a>が100回まわる中で、50回目だけを確認したいときに最適です。</p>



<p class="wp-block-paragraph">設定方法は次のとおりです。</p>



<ol class="wp-block-list"><li>「ウォッチ式の追加」ダイアログを開きます</li><li>「式」欄に条件式を入力します（例: <code>i = 50</code>）</li><li>「ウォッチの種類」で「<strong>式がTrueのときに中断</strong>」を選択します</li><li>「OK」をクリックします</li></ol>



<p class="wp-block-paragraph">ブレークポイントだと「毎回そこで止まる」のが難点です。このモードなら「条件を満たしたときだけ止まる」ので効率的です。</p>



<h3 class="wp-block-heading"><span id="toc13">値が変更されたときに中断</span></h3>



<p class="wp-block-paragraph">「<strong>値が変更されたときに中断</strong>」は、監視している変数の値が変わった瞬間に自動で一時停止するモードです。</p>



<p class="wp-block-paragraph">どのタイミングで値が書き換わるか分からないバグの追跡に重宝します。「この変数、いつの間にか0になってる&#8230;&#8230;」というケースですね。</p>



<p class="wp-block-paragraph">設定方法は「式がTrueのときに中断」と同じです。ウォッチの種類を「<strong>値が変更されたときに中断</strong>」に変えるだけです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>「式がTrueのときに中断」と「値が変更されたときに中断」は、マクロの実行速度にわずかに影響します。VBAがステップごとに条件を評価するためです。大量のウォッチ式を設定するとパフォーマンスが落ちることがあるので、必要最低限に絞りましょう。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc14">3種類の使い分け早見表</span></h3>



<p class="wp-block-paragraph">どのモードを使えばよいか迷ったときは、次の表を参考にしてください。</p>



<figure class="wp-block-table"><table><thead><tr><th>やりたいこと</th><th>選ぶウォッチの種類</th><th>式の入力例</th></tr></thead><tbody><tr><td>変数の値をリアルタイムで確認したい</td><td>式ウォッチ</td><td><code>total</code></td></tr><tr><td>特定の条件で止めたい</td><td>式がTrueのときに中断</td><td><code>i = 50</code></td></tr><tr><td>エラーになる値を捉えたい</td><td>式がTrueのときに中断</td><td><code>price < 0</code></td></tr><tr><td>いつ値が変わるか調べたい</td><td>値が変更されたときに中断</td><td><code>flag</code></td></tr><tr><td>配列の要素数を追いたい</td><td>式ウォッチ</td><td><code>UBound(arr)</code></td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><span id="toc15">実務で役立つ活用テクニック</span></h2>



<p class="wp-block-paragraph">基本的な使い方がわかったところで、実務で使える便利なテクニックを紹介します。</p>



<h3 class="wp-block-heading"><span id="toc16">オブジェクトのプロパティを展開して確認する</span></h3>



<p class="wp-block-paragraph">ウォッチウィンドウでは、Range型やWorksheet型などのオブジェクト変数も追加できます。追加すると、中身を<strong>ツリー形式で展開</strong>して確認できます。</p>



<p class="wp-block-paragraph">たとえば <code>Range("A1")</code> をウォッチ式に追加してみましょう。Value、Row、Column、Font、Interiorなど、セルのプロパティが一覧で表示されます。</p>



<p class="wp-block-paragraph">「フォントサイズって今いくつだっけ？」というとき、イミディエイトウィンドウに打ち込まなくても展開するだけで確認できます。</p>



<h3 class="wp-block-heading"><span id="toc17">配列変数をウォッチウィンドウで確認する</span></h3>



<p class="wp-block-paragraph">ウォッチウィンドウには、配列変数も追加できます。たとえば <code>Dim arr(99) As Long</code> のような配列を「式」欄に <code>arr</code> と入力して追加します。</p>



<p class="wp-block-paragraph">すると、ウォッチウィンドウに <code>arr</code> の行が追加され、左側に「+」ボタンが表示されます。この「+」をクリックすると、<code>arr(0)</code> から <code>arr(99)</code> まで全要素を展開して一覧で確認できます。</p>



<p class="wp-block-paragraph">特定のインデックスだけを監視したいときは、<code>arr(50)</code> のようにインデックスを指定してウォッチ式に追加します。注目したい要素だけをピンポイントで見張れるので、画面がすっきりします。</p>



<p class="wp-block-paragraph">大量要素の配列で「特定インデックスの値だけが壊れている」というバグを追うとき、この使い分けが効いてきます。</p>



<h3 class="wp-block-heading"><span id="toc18">式を使った高度な監視</span></h3>



<p class="wp-block-paragraph">ウォッチ式の「式」欄には、単純な変数名だけでなく計算式や比較式も入力できます。</p>



<figure class="wp-block-table"><table><thead><tr><th>式の例</th><th>用途</th></tr></thead><tbody><tr><td><code>i</code></td><td>変数iの値を表示</td></tr><tr><td><code>i > 100</code></td><td>iが100を超えたらTrue</td></tr><tr><td><code>Len(myStr)</code></td><td>文字列の長さを表示</td></tr><tr><td><code>Range("A" & i).Value</code></td><td>動的なセル参照の値を表示</td></tr><tr><td><code>UBound(arr) - LBound(arr) + 1</code></td><td>配列の要素数を表示</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">計算結果や関数の戻り値もリアルタイムで監視できます。複雑な処理のデバッグに役立ちます。</p>



<h3 class="wp-block-heading"><span id="toc19">ウォッチ式の編集と削除</span></h3>



<p class="wp-block-paragraph">追加したウォッチ式を変更したいときは、ウォッチウィンドウ内の式をダブルクリックします。「ウォッチ式の編集」ダイアログが開きます。</p>



<p class="wp-block-paragraph">不要になったウォッチ式を削除するには、対象の行を右クリックして「<strong>ウォッチ式の削除</strong>」を選択します。行を選択してDeleteキーを押してもOKです。</p>



<h3 class="wp-block-heading"><span id="toc20">イミディエイトウィンドウと組み合わせる</span></h3>



<p class="wp-block-paragraph">ウォッチウィンドウで値の変化を監視しつつ、<a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">イミディエイトウィンドウ</a>で値を直接書き換える使い方が強力です。</p>



<p class="wp-block-paragraph">たとえば、ウォッチウィンドウで <code>total</code> を監視中にしておきます。イミディエイトウィンドウで <code>total = 0</code> と入力してEnterを押します。すると、ウォッチウィンドウの値もリアルタイムで更新されます。</p>



<p class="wp-block-paragraph">「変数を0にリセットしたら処理はどう動く？」というシミュレーションが手軽にできます。</p>



<h3 class="wp-block-heading"><span id="toc21">実務シナリオ別：ウォッチウィンドウが威力を発揮する場面</span></h3>



<p class="wp-block-paragraph">3種類のウォッチを実務でどう使うか、具体的なシナリオで見てみましょう。</p>



<p class="wp-block-paragraph"><strong>シナリオA: 1万行ループの特定行でバグが出る</strong></p>



<p class="wp-block-paragraph">1万行を処理するループで、なぜか途中の1行だけ結果がおかしいとします。毎回ブレークポイントで止めていては日が暮れますよね。こんなときは、カウンター変数に <code>i = 9999</code> という条件を設定し、「式がTrueのときに中断」を選びます。9999行目に到達した瞬間だけマクロが止まるので、その時点の各変数の状態をじっくり調べられます。</p>



<p class="wp-block-paragraph"><strong>シナリオB: オブジェクト変数がいつNothingになるか分からない</strong></p>



<p class="wp-block-paragraph">セットしたはずのオブジェクト変数が、処理の途中でいつの間にか Nothing になっているケースです。<code>obj Is Nothing</code> という式を「式がTrueのときに中断」で設定しておけば、Nothingになった瞬間にマクロが止まります。「どこで参照が切れたのか」を一発で特定できます。</p>



<p class="wp-block-paragraph">どちらも<a href="https://mashukabu.com/how-to-use-do-loop/">Do Loopなどのループ処理</a>と組み合わせると、デバッグの手間が大幅に減ります。</p>



<h2 class="wp-block-heading"><span id="toc22">ウォッチウィンドウのよくあるトラブルと対処法</span></h2>



<p class="wp-block-paragraph">使っていて「あれ？」となることがあるかもしれません。よくあるトラブルをまとめました。</p>



<p class="wp-block-paragraph">[faq q="ウォッチウィンドウに「範囲外」と表示されます。" a="マクロが実行中でないか、監視している変数のスコープ外で止まっています。F8キーでステップ実行中に確認してください。"]<br>[faq q="ウォッチウィンドウの値が更新されません。" a="マクロが一時停止していない状態です。ブレークポイントまたはStop文でマクロを一時停止してから確認してください。"]<br>[faq q="ウォッチウィンドウが消えてしまいました。" a="誤って閉じたか、VBEを再起動したためです。VBEの「表示」メニューから「ウォッチ ウィンドウ」を選択して再表示してください。"]<br>[faq q="ウォッチ式でエラーが表示されます。" a="変数名のスペルミスか、スコープの違いが原因です。ウォッチ式をダブルクリックして式を編集・修正してください。"]<br>[faq q="ウォッチ式を追加したらマクロが遅くなりました。" a="ウォッチ式を大量に設定すると処理速度に影響します。デバッグが終わったら不要なウォッチ式を削除して数を絞ってください。"]</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>ウォッチウィンドウに追加した式は、<strong>VBEを閉じるとリセットされます</strong>。次回VBEを開いたときは再度追加が必要です。頻繁に使うウォッチ式がある場合は、コード内にコメントとしてメモしておくと便利です。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc23">まとめ</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>: メニュー・ドラッグ・右クリックの3つの方法</li><li><strong>式ウォッチ</strong>: 変数の値をリアルタイムで監視</li><li><strong>Trueのときに中断</strong>: 条件を満たしたら自動停止</li><li><strong>値変更時に中断</strong>: 値が変わった瞬間に自動停止</li><li><strong>オブジェクト展開</strong>: Rangeなどのプロパティをツリー形式で確認</li></ul>



<p class="wp-block-paragraph">Debug.Printだけでデバッグしていた方は、「条件付き中断」を試してみてください。ループ処理のデバッグがかなり快適になるはずです。</p>



<p class="wp-block-paragraph">VBEにはウォッチウィンドウ以外にもデバッグに役立つウィンドウがあります。あわせてチェックしてみてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc24">あわせて読みたい</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-vbe-local-window-explanation/">VBAローカルウィンドウの使い方</a></li><li><a href="https://mashukabu.com/excel-vbe-immediate-window-explanation/">VBAイミディエイトウィンドウの使い方</a></li><li><a href="https://mashukabu.com/excel-vba-vbe-menu-explanation/">VBEの画面の見方を図解で解説</a></li><li><a href="https://mashukabu.com/how-to-use-do-loop/">VBA Do Loopの使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-vbe-watch-window-explanation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
