【VBA】開発中だけ実行するデバッグ用コードを記述する方法(条件付きコンパイル)

目次

はじめに

VBAでマクロを開発している最中は、Debug.Print で変数の値を確認したり、テスト用のメッセージボックスを表示したりと、デバッグのためのコードを多用します。しかし、マクロが完成して他の人に配布する際には、これらのデバッグ用コードは不要なので、一つずつ手作業で削除したり、コメントアウトしたりするのは非常に面倒です。

VBAの「条件付きコンパイル」という機能を使えば、開発中(テストモード)か、本番環境かを切り替えることで、特定のコードブロックを実行に含めたり、完全に除外したりすることができます。

この記事では、#Const#If...#End If を使って、デバッグ用のコードと本番用のコードをスマートに切り替える方法を解説します。


条件付きコンパイルのサンプルコード

このマクロは、モジュールの先頭で DEBUG_MODE という条件付きコンパイル定数を定義し、#If ブロックを使って、その定数が True の場合のみデバッグ用の Debug.Print を実行します。

完成コード

'--- 1. 条件付きコンパイル用の定数を宣言 ---
' Trueに設定すると、#If DEBUG_MODE Then ... #End If の中が有効になる
#Const DEBUG_MODE = True
' 本番用にするときは、この行をコメントアウトするか、Falseに書き換える
' #Const DEBUG_MODE = False

Sub ConditionalCompilationExample()
    Dim i As Long
    
    For i = 1 To 5
        '--- 2. #Ifブロックで、デバッグ用の処理を囲む ---
        #If DEBUG_MODE Then
            ' このDebug.Printは、DEBUG_MODE = True のときだけ実行される
            Debug.Print "ループ " & i & "回目..."
        #End If
        
        '--- 本番環境でも常に実行される処理 ---
        Cells(i, "B").Value = "Data " & i
    Next i

    #If DEBUG_MODE Then
        MsgBox "デバッグモードで処理が完了しました。", vbInformation
    #Else
        MsgBox "処理が完了しました。", vbInformation
    #End If
End Sub

コードの解説

1. #Const DEBUG_MODE = True

これが「条件付きコンパイル定数」を宣言する部分です。

  • #Const: Const の前にハッシュマーク # が付きます。これは、通常の定数とは異なり、プログラムのコンパイル時(実行前のコード解釈の段階)に評価されることを意味します。
  • この定数の値を切り替えることで、どのコードブロックをコンパイルに含めるかを制御します。
    • = True: #If DEBUG_MODE Then 以下のコードが有効になります。
    • = False またはこの行自体をコメントアウト: #If DEBUG_MODE Then 以下のコードはコンパイルの対象から完全に除外されます。つまり、完成したプログラムにはそのコードが存在しないのと同じ状態になります。

2. #If DEBUG_MODE Then ... #End If

通常の If ステートメントとよく似ていますが、全てにハッシュマーク # が付きます。

  • #If, #Else, #End If: これらのディレクティブ(指示子)で囲まれたコードブロックは、#Const で定義された定数の値に基づいて、コンパイルに含めるかどうかが決定されます。
  • DEBUG_MODETrue であれば、#If#Else の間のコードがプログラムの一部となり、False であれば #Else#End If の間のコードがプログラムの一部となります(#Else は省略可能)。

まとめ

今回は、条件付きコンパイルを使って、開発用のコードと本番用のコードを切り替える方法を解説しました。

  • #Const 定数名 = True/False で、コンパイルのスイッチを定義する。
  • #If ... #Else ... #End If ディレクティブで、スイッチの状態に応じて有効化したいコードを囲む。

このテクニックを使えば、デバッグ用のコードをわざわざ削除したりコメントアウトしたりする手間が省け、モジュール先頭の #Const の一行を書き換えるだけで、簡単に「デバッグモード」と「本番モード」を切り替えることができます。これにより、開発効率とコードの安全性が大きく向上します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次