VBAでプログラムを作成する際、コードの動作確認やデバッグを行うことは非常に重要です。
その際に便利なのが Debug.Print です。
本記事を読むことで、下記のことがわかります。
- Debug.Printの基本的な使い方・書き方
- イミディエイトウィンドウでの実行結果の確認方法
- よくあるエラーとその対策、活用例
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
VBAのdebug.printとは
「debug.print」は、メッセージや計算結果を表示することができる機能です。
マクロの最終結果はもちろん、途中経過なども出力できます。
コードも簡単なため、デバッグ方法として最も手軽に用いられます。
【デバッグとは?】
プログラムの誤り(バグ)を見つけ、手直しをすること。
思い通りに動作しない場合や、エラーが発生した際に原因を特定し、改善する場合に用いられる。
マクロを作成するうえで、必要不可欠といっても過言ではないため、使い方をマスターしておきましょう。
次項で詳しく解説いたします。
debug.printの基本的な使い方
下記のVBAコードを見てください。
Sub メッセージ表示()
Debug.Print "ようこそマクロの世界へ!"
End Sub
このコードを実行することで、「ようこそマクロの世界へ!」というメッセージを表示させることができます。
「Debug.Print」の後ろには「半角スペース」がありますので忘れないようにしましょう。
また、メッセージは「”(ダブルクォーテーション)」で囲ってください。
マクロの始め方は基礎については、下記記事でわかりやすく解説しております。ご参考ください。
しかしながら、これだけでは何も起こりません。
なぜなら、メッセージを表示させる場所が無いからです。
「Debug.Print」で出力したメッセージを表示させるには、「イミディエイトウィンドウ」というのが必要になります。
では、「イミディエイトウィンドウ」を表示させる方法を解説いたします。
イミディエイトウィンドウの表示方法
コードを書いている「VBA Project」の画面から開始します。

現在エクセルの画面に居る場合は、
「開発」→「Visual Basic」をクリックして、「VBA Project」に移行してください。
(または「Alt」キーを押しながら「F11」キーを押すことでも移行可)

「VBA Project」の画面上部にあるメニューから、「表示」→「イミディエイトウィンドウ」をクリックします。
(または「ctrl」キーを押しながら「G」キーを押すことでも可)

画面の下の方になにやらウィンドウが現れたかと思います。

これが「イミディエイトウィンドウ」です。
これでメッセージを表示させることができるようになりました。
ではコードを実行してみましょう。
画面上部のメニューから、実行ボタンを押します。


「イミディエイトウィンドウ」にメッセージ(ようこそマクロの世界へ!)が表示されました。成功です。

それで?
これが何の役に立つの?

そうですよね。
この方法だけでは、単なる掲示板になってしまっています。
しかしながら「Debug.Print」の本領発揮はここからです。
デバッグをするためのいろいろな使い方を次項で紹介いたします。
Debug.Printを活用したデバッグ術
変数の値を出力
「Debug.Print」を使うことで、変数の中身である値をイミディエイトウィンドウに表示することができます。
Sub 変数の値を出力()
Dim a As Integer
a = 10
Debug.Print a
End Sub

変数に値を格納したり、変数の値を変更した際に、キチンと反映されているかを確認したい場合に便利です。
変数や宣言については下記記事をご参考ください。
変数だけを表示すると何の値なのかわかりにくいですよね。
そんな場合は、メッセージ(値)と変数を同時に表示することができます。
「メッセージ」と「変数」の間に「&」をつけてください。
Sub 変数の値を出力()
Dim a As Integer
a = 10
Debug.Print "変数aの値: " & a
End Sub

経過を出力
変数の値が都度変更されるマクロでは、経過を表示することができます。
Sub 変数の値を出力()
Dim a As Integer
a = 10
Debug.Print "変数aの値: " & a
a = 20
Debug.Print "変数aの値: " & a
a = 30
Debug.Print "変数aの値: " & a
End Sub

複数の値を出力
複数の値を表示することもできます。
Sub 複数の値を出力()
Debug.Print "A", "B", "C" ' タブ区切り
End Sub

値と値の間に「,(カンマ)」を入れることで、タブキーを押したのと同じ間隔(広め)で値を表示できます。
下記は「,」ではなく、「;(セミコロン)」にした場合の例です。
Sub 複数の値を出力()
Debug.Print "A"; "B"; "C" ' 結合
End Sub

文字の場合は結合されます。
数値の場合は、スペースキーを押したのと同じ間隔(狭め)で値を表示できます。
Sub 複数の値を出力()
Debug.Print 1 ; 2 ; 3 ' スペース区切り
End Sub

値ごとに改行したい場合は、「vbNewLine」を記述してください。
Sub 複数の値を出力()
Debug.Print "A" & vbNewLine & "B" & vbNewLine & "C" ' 改行
End Sub

条件分岐の動作確認
条件分岐がうまく動作しているかを確認したい場合も「Debug.Print」が便利です。
Sub 条件分岐の動作確認()
Dim i As Integer
i = 0
If i = 0 Then
Debug.Print "無くなりました"
ElseIf count <= 5 Then
Debug.Print "少なめ"
Else
Debug.Print "ストックあり"
End If
End Sub

今回の条件分岐は、一般的なIf文を使っています。
If文については下記記事でわかりやすく解説しております。ご参考ください。
ループ文の動作確認
同様にループ処理の確認もできます。
Sub ループ文の動作確認()
Dim i As Integer
For i = 1 To 5
Debug.Print i
Next i
End Sub

For文については下記記事でわかりやすく解説しております。ご参考ください。
マクロを作成せずに結果を確認
イミディエイトウィンドウ内に直接計算式を記述して、結果を確認することもできます。
【イミディエイトウィンドウ内】
? 10 + 20
「Enter」キーを押すと、下図のように結果が表示されます。

Debug.Printでよくあるエラーと対処法
結果が表示されない原因と解決策
実行結果が表示されない場合は、以下の原因が考えられます。
- イミディエイトウィンドウが開いていない:「ctrl + G」で表示
- コードが実行されていない:実行ボタンを押すか、F5(実行)やF8(一行ずつ実行)で確認
オブジェクト変数の中身は表示できない
便利な「Debug.Print」ですが、オブジェクト変数(ワークシートなど)の中身は表示することができません。
Sub エラー()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
Debug.Print ws ' 表示できない
End Sub
ワークシートの名前は表示することができます。
Sub シートの名前を表示()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
Debug.Print ws.Name
End Sub
ブックやセルについても同じです(「.Value」でセルの値は表示可)
最後に
「debug.print」の使い方について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!