VBAでデバッグを簡単に!Debug.Printの活用法を徹底解説

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
アイキャッチ

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


VBAでエラーの原因が分からない

コードを作成中に変数や配列の中身が分からなくなる

これらの問題を解決してくれるのが
VBAの「Debug.Print」です!


この記事では、VBA初心者でも簡単にデバッグできる方法として「Debug.Print」の使い方を解説します。

VBAでコードを開発すると、デバッグは避けて通れないステップになります。
しかし、「どうやってエラーの原因を調べればいいの?」と悩む方も多いはずです。

この記事では、そんな悩みを解決するために、Debug.Printの基本的な使い方を解説します。
VBAのデバッグ操作で重要なイミディエイトウィンドウの表示方法や、応用的な使い方も詳しく紹介しますよ。

この記事を実践して、次回のVBA開発でエラーをスムーズに解決できるようになりましょう!


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

目次

この記事で「できるようになる」こと

この記事を読むことで、次のことが分かるようになります。

スポンサーリンク

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 を使用してください。)

VBEを開く

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

イミディエイトウィンドウ・ローカルウィンドウを選択

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

あわせて読みたい
エクセルVBAのおすすめ初期設定 | 効率化のための必須設定ガイド 「VBAを快適な環境で使いたい!!」そんな悩みを抱えていませんか? ・VBAを快適に使える設定方法を知りたい。・デフォルトのまま使用してもいいの? 今回は、VBAの「お...

Debug.Printの構文と基本例

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
使用例1. 変数の中身を確認する場合の結果

使用例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
使用例2. 配列の中身を確認する場合の結果

使用例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
使用例3. 条件付きで処理を確認する場合の結果
スポンサーリンク

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
解決策1:必要な情報だけを出力するの結果

解決策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
解決策2:ラベルを付けて出力を整理するの結果

注意3. 前回表示したDebug.Printの結果を削除してから出力しましょう

Debug.Printの出力はイミディエイトウィンドウに蓄積されるため、以前の出力内容が残ったままになります。
これにより、データが競合したり見づらくなる場合があるため、事前に出力内容を削除してから実行することをおすすめします。

しかし、Debug.Printにはイミディエイトウィンドウを削除する機能が標準で備わっていません。
そのため、以下のように手動で削除するか、空白行で埋める方法を使用する必要があります。

削除方法1. イミディエイトウィンドウを手動で削除する

イミディエイトウィンドウを手動でクリアするには、次の方法があります。

削除方法
  1. イミディエイトウィンドウ内の値を直接削除する方法
    • イミディエイトウィンドウ内の値をクリックし、BackspaceやDeleteキーで削除します。
  2. ショートカットキーを使用する方法
    • イミディエイトウィンドウ内をクリックして値を選択します。
    • 「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講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べる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

処理結果

使用方法1. プロセスごとの進行状況を記録するの結果

このコードで使用している機能

スクロールできます
機能名説明
For Next繰り返し処理を行うためのループ構文です。
このコードでは、データを1つずつ処理する際に使用しています。
Debug.Print実行中のデータや処理結果をイミディエイトウィンドウに出力します。
進行状況や変数の確認に便利です。
Dim変数を宣言するためのキーワードです。
このコードでは itotalDataprocessedData の変数を宣言しています。
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

処理結果

使用例2. 条件分岐やエラー箇所を特定するの結果

このコードで使用している機能

スクロールできます
機能名説明
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

処理結果

使用方法3. 配列やデータベース処理の中間結果を確認するの結果

このコードで使用している機能

スクロールできます
機能名説明
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

処理結果

使用例4. エラー発生時の変数状態を確認するの結果

このコードで使用している機能

スクロールできます
機能名説明
For Next繰り返し処理を行うための構文です。
このコードでは、複数のデータを順番に処理する際に使用しています。
On Error Resume Nextエラーが発生してもプログラムを中断せず、次の処理に進むためのエラー処理構文です。
エラー処理時の柔軟性を高める際に役立ちます。
Debug.Printエラー発生時や正常処理時の情報をイミディエイトウィンドウに出力します。
エラー箇所や原因を特定し、ログとして残す際に非常に便利です。

このコードのポイント

ポイント
  • エラー箇所と原因を素早く特定する
    • エラーが発生したデータ番号や処理中の値を記録することで、どの処理で問題が発生したかを特定できます。
      例えば、データの特定値や不正な計算が原因の場合、それが即座に分かるようになります。
  • Err.Descriptionでエラー内容を詳細に記録する
    • Err.Descriptionを活用すれば、エラーの内容を人間が読める形式で取得できます。
      • 例:0除算エラーの場合、「除算で割る数が 0 です」というエラー内容が返されます。
  • エラー処理を適切にリセットする
    • 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ステートメントを挿入
    • 処理を停止させたい箇所にStopを記述します。
  • ローカルウインドウを開く
    • VBE(Visual Basic Editor)のメニューから「表示」→「ローカルウインドウ」を選択して開きます。

      ローカルウィンドウ」の設定方法をもう一度見る。
  • 変数の値を確認
    • 処理が停止した時点で、ローカルウインドウに表示される変数の値を確認できます。

デバッグ方法2. ステップインを使った詳細なデバッグ方法

ステップイン(F8キー)は、コードを1行ずつ実行しながら動作を確認できるデバッグ機能です。

これにより、各ステップでの変数の値や計算結果を逐次確認することができます。

手順

  • ステップインモードに切り替え
    • VBEで対象のコードを開き、マクロを開始する前にカーソルを配置します。
      「F8キー」を押すことで、コードを1行ずつ実行することができます。
  • ローカルウインドウで値を確認
    • 各行の処理が実行されるたびに、ローカルウインドウで変数や計算結果をリアルタイムで確認できます。
スポンサーリンク

この記事のまとめ

この記事では、VBAのデバッグに欠かせないDebug.Printの使い方を中心に、初心者でもすぐに実践できるデバッグ方法を解説しました。

VBAでのエラー原因を迅速に特定し、コードを効率的に改善するための方法を学ぶことができます。

ポイントのおさらい

さらに学ぶために

Debug.Printやその他のデバッグ方法を活用することで、VBA開発の効率を飛躍的に向上させることができます。
ぜひ、今回の記事を参考にして、日々の作業効率化に役立ててください!

他にも、以下の記事でVBA開発をさらに便利にするテクニックを紹介しています。
興味があれば、ぜひご覧ください。

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「JavaScr...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次