「VBAでエラーが出ても原因がわからない…」
このように悩んでいませんか?

・VBAでエラーの原因が分からない
・コードを作成中に変数や配列の中身が分からなくなる



これらの問題を解決してくれるのが
VBAの「Debug.Print」です!
この記事では、VBA初心者でも簡単にデバッグできる方法として「Debug.Print」の使い方を解説します。
VBAでコードを開発すると、デバッグは避けて通れないステップになります。
しかし、「どうやってエラーの原因を調べればいいの?」と悩む方も多いはずです。
この記事では、そんな悩みを解決するために、Debug.Printの基本的な使い方を解説します。
VBAのデバッグ操作で重要なイミディエイトウィンドウの表示方法や、応用的な使い方も詳しく紹介しますよ。
この記事を実践して、次回のVBA開発でエラーをスムーズに解決できるようになりましょう!
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
この記事で「できるようになる」こと
この記事を読むことで、次のことが分かるようになります。
- VBAのDebug.Printはどんなことができるのか?確認を行う
- Debug.Printの基本を習得する
- Debug.Printを使用する際の注意ポイントを把握する
- Debug.Printのよく使われる使用例を確認する(ログやエラー処理)
- Debug.Print以外のデバッグ方法を確認する(Stopステートメントなど)
VBAのDebug.Printとは?どんなことができる?



「Debug.Print」を使用すると、具体的にどんなことができるの?



VBAのデバッグ作業において、Debug.Printは初心者でも簡単に使える強力なツールです。
以下にできることなどを記載します。
Debug.Printとは?
VBAの「Debug.Print」とは、プログラムの中で変数の値や処理の結果を確認するためのコマンドです。
実行中のデータや値をイミディエイトウィンドウに出力することで、エラーや不具合の原因を素早く特定できます。
初心者でも簡単に使えるため、「エラーの原因が分からない」という悩みを解消できる便利なデバッグツールです。
Debug.Printでできること
以下のような場面でDebug.Printが活躍します。
- ✅ 変数の中身を確認
- 実行中に変数がどのように変化しているかが分かります。
- ✅ 処理の流れを把握
- プログラムのどこまで進んでいるかを確認可能です。
- ✅ エラー箇所を特定
- データの不具合や処理ミスを迅速に見つけられます。
具体的な使い方は後ほど詳しく解説しますが、まずは初心者の方でも安心して使えるデバッグツールだということを覚えておきましょう。
VBA Debug.Printの基本的な使い方|変数・配列・条件分岐を確認する方法
VBAでデバッグを効率化するための「Debug.Print」ですが、その基本的な使い方はとてもシンプルで、初心者でもすぐに使いこなせるようになります。
Debug.Printを使用することで、変数の値や処理結果をリアルタイムで確認できるので、コードのエラー箇所や動作の流れを素早く把握できます。


まずは「イミディエイトウィンドウ」を表示させよう
Debug.Printでの結果を表示させるためには、まず「イミディエイトウィンドウ」を表示させる必要があります。
イミディエイトウィンドウに加えて、デバッグを効率化するために「ローカルウィンドウ」も一緒に表示させる設定がおすすめです。
以下の手順に従って、「イミディエイトウィンドウ」と「ローカルウィンドウ」を設定しましょう。
「クリック」してコードの詳細解説を見る
1. VBE(Visual Basic Editor)を開く
1)「開発」タブを選択します。
2)「Visual Basic」をクリックします。
(または、ショートカットキー Alt + F11 を使用してください。)


2.「イミディエイトウィンドウ」と「ローカルウィンドウ」を表示する
1)「表示」メニューから
「イミディエイトウィンドウ」と「ローカルウィンドウ」をクリックします。


■ 関連リンク
VBAを開発する際におすすめの初期設定については、以下の記事で詳しく紹介しています。
初期設定を整えることで、作業効率がさらに向上します!


Debug.Printの構文と基本例


引数名 | 必須/任意 | 説明 |
---|---|---|
出力したい内容 | 必須 | 出力対象の文字列、変数、数式などを指定可能。 デバッグに必要な情報を記述します。 |
実行結果の表示場所
Debug.Printの実行結果は、必ず「イミディエイトウィンドウ」に表示されます。
イミディエイトウィンドウが開いていないと結果が確認できないため、事前に設定をしておきましょう。
イミディエイトウィンドウ」の設定方法をもう一度見る。
「さらに詳細な仕様については、Microsoft公式のDebug オブジェクトを参照してください。
実際の使用例|変数・配列・条件分岐を確認
使用例1. 変数の中身を確認する場合
変数に格納された値を確認したいときに使います。
Sub CheckVariable()
Dim userName As String
Dim userAge As Long
userName = "田中"
userAge = 30
Debug.Print "名前: " & userName '// イミディエイトウィンドウに「名前: 田中」と表示される
Debug.Print "年齢: " & userAge '// イミディエイトウィンドウに「年齢: 30」と表示される
End Sub


使用例2. 配列の中身を確認する場合
配列の内容を順番に出力することで、配列に正しい値が格納されているかを確認できます。
vbaコードをコピーするSub CheckArray()
Dim fruits(2) As String
Dim i As Long
fruits(0) = "りんご"
fruits(1) = "バナナ"
fruits(2) = "ぶどう"
For i = LBound(fruits) To UBound(fruits)
Debug.Print "fruits(" & i & "): " & fruits(i) '// 各要素をイミディエイトウィンドウに出力
Next i
End Sub


使用例3. 条件付きで処理を確認する場合
条件に応じて処理の内容や変数の値を出力し、条件分岐が正しく動いているかを確認します。
Sub ConditionalCheck()
Dim value As Long
value = 10
If value > 5 Then
Debug.Print "valueは5より大きい: " & value '// イミディエイトウィンドウに「valueは5より大きい: 10」と表示
Else
Debug.Print "valueは5以下です"
End If
End Sub


VBAでDebug.Printを使用する際の注意ポイント
ここでは、初心者が陥りやすいポイントや、実際に開発環境で使用する際に知っておくべき注意点を詳しく解説します。
これらを理解することで、Debug.Printをより効果的に使いこなし、VBAでの作業をスムーズに進められるようになります。
注意1. 事前にイミディエイトウィンドウを開いておきましょう
Debug.Printの結果は、必ず「イミディエイトウィンドウ」に出力されます。
ウィンドウが開いていない場合、結果が確認できず、デバッグが進みません。
事前にイミディエイトウィンドウを設定して開いておきましょう。
イミディエイトウィンドウ」の設定方法をもう一度見る。
「注意2. 大量の出力がある場合は表示する内容を整理しておきましょう
Debug.Printは大量のデータを出力する際、イミディエイトウィンドウが埋まってしまい、必要な情報が見えにくくなることがあります。
これにより、必要な情報が見えなくなることがあるため、出力内容を絞り込んだり整理する工夫が必要です。
イミディエイトウィンドウの表示上限
イミディエイトウィンドウには、約200行まで表示することができます。
これを超えると古いデータが削除され、新しいデータが表示されてしまいます。
そのため、大量のデータを出力する際は、以下のような工夫を行い、必要な情報を効率的に確認しましょう。
解決策1:必要な情報だけを出力する
条件を指定して、必要なデータのみを出力するようにします。
下記のコードは、偶数だけを出力する方法です。
Sub FilteredOutput()
Dim i As Long
For i = 1 To 10
If i Mod 2 = 0 Then '// 偶数の場合のみ出力
Debug.Print "偶数: " & i
End If
Next i
End Sub


解決策2:ラベルを付けて出力を整理する
複数のデータを出力する場合、ラベルを付けるとより分かりやすくなります。
Sub LabeledOutput()
Dim num As Long
Dim square As Long
For num = 1 To 5
square = num * num
Debug.Print "数値: " & num & ", 2乗: " & square
Next num
End Sub


注意3. 前回表示したDebug.Printの結果を削除してから出力しましょう
Debug.Printの出力はイミディエイトウィンドウに蓄積されるため、以前の出力内容が残ったままになります。
これにより、データが競合したり見づらくなる場合があるため、事前に出力内容を削除してから実行することをおすすめします。
しかし、Debug.Printにはイミディエイトウィンドウを削除する機能が標準で備わっていません。
そのため、以下のように手動で削除するか、空白行で埋める方法を使用する必要があります。
削除方法1. イミディエイトウィンドウを手動で削除する
イミディエイトウィンドウを手動でクリアするには、次の方法があります。
- イミディエイトウィンドウ内の値を直接削除する方法
- イミディエイトウィンドウ内の値をクリックし、BackspaceやDeleteキーで削除します。
- ショートカットキーを使用する方法
- イミディエイトウィンドウ内をクリックして値を選択します。
- 「Ctrl + A → Delete」のショートカットキーを使うことで、全ての出力を一括で削除できます。
削除方法2. 空白で埋めて出力をリセットする
大量の空白行を出力して、イミディエイトウィンドウを見た目上クリアする方法です。
この方法は、特定の条件でイミディエイトウィンドウを一時的にリセットしたい場合に便利です。
Sub ClearImmediateWindow()
Dim i As Long
'// 空白行を100行出力して内容を埋める
For i = 1 To 100
Debug.Print ""
Next i
End Sub
- この方法は「以前のデータを見えなくする」だけで、完全に削除するものではありません。
- 手動削除が手間な場合や、一時的にデバッグ結果をリセットしたい場合に活用してください。
VBA実務でDebug.Printをフル活用する方法|進行状況・エラー特定・中間結果を徹底解説!
Debug.Printは、単純にコードの結果を出力するだけでなく、実務でのログ出力や動作確認にも効果的です。
特にコードの途中途中で変数の状態や処理の流れを確認しながら進めることで、バグの早期発見や原因特定が可能になります。
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
使用例1. プロセスごとの進行状況を記録する
開発では、コードのどこまで実行されたかを確認するために、処理の進行状況をログとして出力することがよく行われます。
これにより、処理が途中で停止してもどの段階で問題が発生したかを特定できます。
コード例:データ処理の進行状況を記録する
以下のコードは、複数のデータを処理する途中で進行状況をDebug.Printに出力しています。
Sub ProcessData()
Dim i As Long
Dim totalData As Long
Dim processedData As Long
'// 処理対象データの総数
totalData = 10
Debug.Print "データ処理を開始しました。総データ数: " & totalData
'// データを順番に処理
For i = 1 To totalData
'// 処理内容(ここでは例として値を加工)
processedData = i * 2
Debug.Print "データ番号: " & i & ", 処理後の値: " & processedData
Next i
Debug.Print "データ処理が完了しました。"
End Sub
処理結果


このコードで使用している機能
機能名 | 説明 |
---|---|
For Next | 繰り返し処理を行うためのループ構文です。 このコードでは、データを1つずつ処理する際に使用しています。 |
Debug.Print | 実行中のデータや処理結果をイミディエイトウィンドウに出力します。 進行状況や変数の確認に便利です。 |
Dim | 変数を宣言するためのキーワードです。 このコードでは i 、totalData 、processedData の変数を宣言しています。 |
Cells | 指定した行と列のセルを操作するためのプロパティです。 このコードでは値を参照または設定する際に使用します。 |
このコードのポイント
- 処理の開始・終了時にログを出力する
- 処理の最初と最後にログを出力することで、エラーがどの時点で発生したかを特定しやすくなります。
特にループ処理や複数ステップに分かれた処理では、開始・終了時のログが重要です。 - 開始時には、処理対象のデータ量や条件をログに出力することで、後から確認する際にも役立ちます。
- 処理の最初と最後にログを出力することで、エラーがどの時点で発生したかを特定しやすくなります。
- 進行状況をリアルタイムで確認する
- データごとの進行状況をDebug.Printで記録することで、処理がどこまで進んでいるかをリアルタイムで把握できます。
- 各データ番号や処理後の結果を出力することで、意図しない値や異常な結果が発生した場合もすぐに発見できます。
- ログの見やすさを工夫する
- 出力ログには、データ番号やラベル(例:「データ番号」「処理後の値」)を付けることで、ログ内容が分かりやすくなり、確認がスムーズになります。
- 複雑な処理を行う場合には、進行状況を区切るような「セパレーター」や「区切り線」を追加するのもおすすめです。
使用例2. 条件分岐やエラー箇所を特定する
実務では、条件分岐が複雑なコードでエラーが発生することがあります。
条件の分岐ごとにDebug.Printでログを出力することで、どの条件が実行されたかを確認できます。
コード例:条件分岐ごとのログ出力
Sub CheckConditions()
Dim value As Long
'// サンプルデータ
value = 15
'// 条件分岐に応じてログを出力
If value < 10 Then
Debug.Print "条件1: 値は10未満です。値: " & value
ElseIf value >= 10 And value <= 20 Then
Debug.Print "条件2: 値は10以上20以下です。値: " & value
Else
Debug.Print "条件3: 値は20より大きいです。値: " & value
End If
'// 処理の終了
Debug.Print "条件チェックが終了しました。"
End Sub
処理結果


このコードで使用している機能
機能名 | 説明 |
---|---|
If Then Else | 条件分岐を行うための構文です。 このコードでは、 value の値に応じて処理を3つに分岐しています。 |
Debug.Print | 条件ごとの評価結果をイミディエイトウィンドウに出力しています。 分岐処理の動きを追跡し、エラー箇所を特定する際に非常に便利です。 |
Dim | 変数を宣言するためのキーワードです。 このコードでは value 変数を宣言し、条件分岐の評価に使用しています。 |
このコードのポイント
- 条件ごとにログを出力して処理の流れを把握する
- 各条件分岐でログを出力することで、コードがどの分岐を通過しているかを簡単に把握できます。
- 条件が複雑な場合やネストが深い場合でも、ログによってコードの動きを追跡できます。
- 不具合発生時に条件評価を特定しやすい
- 条件分岐が正しく評価されていない場合、どの条件に問題があるのかをログで確認できます。
- 入力値と条件評価結果をログに残すことで、どのデータで期待通りに動作していないのかを簡単に特定できます。
使用例3. 配列やデータベース処理の中間結果を確認する
開発では、配列やデータベースの中間結果をDebug.Printで出力し、データが正しく処理されているかを確認することも重要です。
コード例:配列の中間結果を出力する
Sub CheckArrayProcessing()
Dim data(1 To 5) As Long
Dim i As Long
'// 配列に値を格納
For i = 1 To 5
data(i) = i * 3
Next i
'// 配列の中間結果を確認
Debug.Print "配列の処理を開始します。"
For i = 1 To 5
Debug.Print "配列インデックス: " & i & ", 値: " & data(i)
Next i
Debug.Print "配列の処理が完了しました。"
End Sub
処理結果


このコードで使用している機能
機能名 | 説明 |
---|---|
For Next | 繰り返し処理を行うための構文です。 このコードでは、配列に値を格納する際や中間結果を出力する際に使用しています。 |
Debug.Print | 配列の各要素や処理結果をイミディエイトウィンドウに出力しています。 中間結果をリアルタイムで確認するために便利です。 |
Dim | 配列とループ用変数を宣言するために使用しています。 このコードでは、 data 配列(サイズ5)とカウンタ変数 i を宣言しています。 |
配列(静的配列) | 一連のデータを格納する構造です。 このコードでは、 data 配列を使用して各要素に値を格納し、その値を処理結果として出力しています。 |
このコードのポイント
- 中間結果を出力することでエラーを早期発見できる
- 配列やデータベースの処理結果を逐一確認することで、データが正しく格納されているか?意図しない値が設定されていないか?を早期に発見できます。
- データ量が多い場合は注意
- 配列の要素数やデータベースのレコード数が多い場合、イミディエイトウィンドウが埋まってしまう可能性があります。
その際は、必要なデータのみを絞り込んで出力するか、ログをファイルに保存する方法を検討してください。
- 配列の要素数やデータベースのレコード数が多い場合、イミディエイトウィンドウが埋まってしまう可能性があります。
使用例4. エラー発生時の変数状態を確認する
エラー発生時にDebug.Printを活用して変数や配列の状態を出力すれば、どの時点で異常が発生したかを特定できます。
コード例:エラー発生時の状態を確認する
Sub ErrorLogging()
Dim i As Long
Dim result As Long
Debug.Print "エラー調査を開始します。"
'// エラー発生が予想される処理
For i = 1 To 5
On Error Resume Next '// エラーが発生してもスキップ
result = 10 / (i - 3) '// 0除算エラーが発生する可能性あり
'// エラーの有無を確認
If Err.Number <> 0 Then
Debug.Print "エラー発生!データ番号: " & i & ", エラー内容: " & Err.Description
Err.Clear '// エラーをクリア
Else
Debug.Print "正常処理: データ番号: " & i & ", 計算結果: " & result
End If
Next i
Debug.Print "エラー調査が終了しました。"
End Sub
処理結果


このコードで使用している機能
機能名 | 説明 |
---|---|
For Next | 繰り返し処理を行うための構文です。 このコードでは、複数のデータを順番に処理する際に使用しています。 |
On Error Resume Next | エラーが発生してもプログラムを中断せず、次の処理に進むためのエラー処理構文です。 エラー処理時の柔軟性を高める際に役立ちます。 |
Debug.Print | エラー発生時や正常処理時の情報をイミディエイトウィンドウに出力します。 エラー箇所や原因を特定し、ログとして残す際に非常に便利です。 |
このコードのポイント
- エラー箇所と原因を素早く特定する
- エラーが発生したデータ番号や処理中の値を記録することで、どの処理で問題が発生したかを特定できます。
例えば、データの特定値や不正な計算が原因の場合、それが即座に分かるようになります。
- エラーが発生したデータ番号や処理中の値を記録することで、どの処理で問題が発生したかを特定できます。
- Err.Descriptionでエラー内容を詳細に記録する
- Err.Descriptionを活用すれば、エラーの内容を人間が読める形式で取得できます。
- 例:0除算エラーの場合、「除算で割る数が 0 です」というエラー内容が返されます。
- Err.Descriptionを活用すれば、エラーの内容を人間が読める形式で取得できます。
- エラー処理を適切にリセットする
Err.Clear
を使用してエラー情報をクリアすることで、次の処理にエラーが影響しないようにすることが重要です。
これにより、複数のデータを処理する場合でも、エラーが他のデータの処理を妨げることを防げます。
Debug.Print以外のデバッグ方法もマスターしよう!
Debug.PrintはVBAのデバッグで非常に便利な機能ですが、それ以外にも多くのデバッグ方法があります。
ここでは、「Stopステートメント」や「ステップイン」を使用して処理を一時停止し、ローカルウィンドウで変数の値を確認する方法を解説します。
これらの方法を組み合わせることで、より詳細にコードの動作を追跡し、効率的にデバッグを進めることができます。
デバッグ方法1. Stopステートメントを使って処理を一時停止する
Stopステートメントは、コードの任意の場所で処理を停止させることができるデバッグ方法です。
処理を停止させることで、その時点での変数の状態や計算結果を確認することができます。
コード例:Stopステートメントで処理を停止
Sub DebugWithStop()
Dim value1 As Long
Dim value2 As Long
Dim result As Long
value1 = 10
value2 = 20
Stop '// 処理を停止してローカルウインドウで値を確認
result = value1 + value2
Debug.Print "計算結果: " & result
End Sub


手順
- Stopステートメントを挿入
- 処理を停止させたい箇所に
Stop
を記述します。
- 処理を停止させたい箇所に
- ローカルウインドウを開く
- VBE(Visual Basic Editor)のメニューから「表示」→「ローカルウインドウ」を選択して開きます。
「ローカルウィンドウ」の設定方法をもう一度見る。
- VBE(Visual Basic Editor)のメニューから「表示」→「ローカルウインドウ」を選択して開きます。
- 変数の値を確認
- 処理が停止した時点で、ローカルウインドウに表示される変数の値を確認できます。
デバッグ方法2. ステップインを使った詳細なデバッグ方法
ステップイン(F8キー)は、コードを1行ずつ実行しながら動作を確認できるデバッグ機能です。
これにより、各ステップでの変数の値や計算結果を逐次確認することができます。
手順
- ステップインモードに切り替え
- VBEで対象のコードを開き、マクロを開始する前にカーソルを配置します。
「F8キー」を押すことで、コードを1行ずつ実行することができます。
- VBEで対象のコードを開き、マクロを開始する前にカーソルを配置します。
- ローカルウインドウで値を確認
- 各行の処理が実行されるたびに、ローカルウインドウで変数や計算結果をリアルタイムで確認できます。
この記事のまとめ
この記事では、VBAのデバッグに欠かせないDebug.Printの使い方を中心に、初心者でもすぐに実践できるデバッグ方法を解説しました。
VBAでのエラー原因を迅速に特定し、コードを効率的に改善するための方法を学ぶことができます。
ポイントのおさらい
- Debug.Printの基本を学ぶ
- Debug.Printは、VBAコード内で変数や処理結果をイミディエイトウィンドウに出力するコマンドです。
デバッグ作業で変数の値や処理の流れを確認するのに非常に便利なツールです。
⇒ 「VBAのDebug.Printとは?どんなことができる?」をもう一度見る
- Debug.Printは、VBAコード内で変数や処理結果をイミディエイトウィンドウに出力するコマンドです。
- Debug.Printの基本的な使い方
- Debug.Printの構文や、変数や配列の中身を出力して確認する方法を紹介しました。
条件分岐のデバッグ例も含めて、初心者でもすぐに試せる具体的なコード例を掲載しています。
⇒ 「VBA Debug.Printの基本的な使い方|変数・配列・条件分岐を確認する方法」をもう一度見る
- Debug.Printの構文や、変数や配列の中身を出力して確認する方法を紹介しました。
- Debug.Printを使用する際の注意ポイント
- Debug.Printを効果的に使用するために、イミディエイトウィンドウを開く方法や、出力データが多すぎる場合の整理方法を解説しました。
さらに、前回の出力を削除する工夫も紹介しています。
⇒ 「VBAでDebug.Printを使用する際の注意ポイント」をもう一度見る
- Debug.Printを効果的に使用するために、イミディエイトウィンドウを開く方法や、出力データが多すぎる場合の整理方法を解説しました。
- 実務で役立つDebug.Printの使用例
- 実際の開発環境での進行状況のログ記録、条件分岐や配列の中間結果の確認、エラー発生時の変数状態の記録など、実務に直結するデバッグ方法を具体的に解説しました。
⇒ 「VBA実務でDebug.Printをフル活用する方法|進行状況・エラー特定・中間結果を徹底解説!」をもう一度見る
- 実際の開発環境での進行状況のログ記録、条件分岐や配列の中間結果の確認、エラー発生時の変数状態の記録など、実務に直結するデバッグ方法を具体的に解説しました。
- Debug.Print以外のデバッグ方法
- Debug.Printだけではなく、Stopステートメントやステップインなど、デバッグに役立つその他の方法も解説しました。
これらを組み合わせることで、より高度なデバッグが可能になります。
⇒ 「Debug.Print以外のデバッグ方法もマスターしよう!」をもう一度見る
- Debug.Printだけではなく、Stopステートメントやステップインなど、デバッグに役立つその他の方法も解説しました。
さらに学ぶために
Debug.Printやその他のデバッグ方法を活用することで、VBA開発の効率を飛躍的に向上させることができます。
ぜひ、今回の記事を参考にして、日々の作業効率化に役立ててください!
他にも、以下の記事でVBA開発をさらに便利にするテクニックを紹介しています。
興味があれば、ぜひご覧ください。

