Excel VBA スタンダード・デバッグについて

デバッグは、プログラムのエラーや問題を特定し、修正するプロセスです。手法やツールについて解説します。

 

Excel VBA デバッグモード

コードの実行中にエラーや予期しない挙動を発見し、修正するために使います。

 

デバッグモード

1.手動でデバッグモードに入る方法
コードの実行中にエラーが発生すると、実行が停止しデバッグモードに移行します。エラーがある行で実行が停止し、問題を特定できます。

デバッグモードに移行するためには、エラーが発生するか、ブレークポイントを設定するか、またはStopステートメントを挿入することができます。

2.デバッグツールの利用
デバッグウィンドウを使用して変数の値を監視したり、ステップ実行(コードの一行ずつ実行)を行ったりできます。

Debug.Printを使って、コードの特定の部分で変数の値やメッセージをコンソールに出力することもできます。

 

Sub DebugSample()
    Dim i As Integer
    Dim total As Integer

    For i = 1 To 10
        total = total + i
        ' コンソールに変数の値を出力
        Debug.Print "i: " & i & ", total: " & total
    Next i

    ' ここにブレークポイントを設定すると、実行が停止します
    ' Stop

    ' エラーがあると実行が停止し、デバッグモードに移行します
    ' エラーを特定することができます
    ' Dim x As Integer
    ' x = 10 / 0
End Sub

 

Excel VBA イミディエイトウィンドウ

イミディエイトウィンドウは、VBAコードを実行中に変数の値や式の評価結果を直接確認できるウィンドウです。

 

イミディエイトウィンドウ

1. イミディエイトウィンドウを開く
VBAエディタ内で、Alt + F11を押してVBAエディタを開き、「Ctrl + G」を押すか、[表示]メニューから「イミディエイトウィンドウ」を選択します。

2. 使い方
イミディエイトウィンドウに直接式や変数を入力し、Enterを押すとその結果が表示します。変数の値を確認したい場合は、`?`を使って`? variableName`と入力します。例: ? myVar

 

イミディエイトウィンドウでのコードの実行は、メインプログラムの実行に影響を与えません。その場で評価されるだけであり、コードに影響を与えることはありません。

 

Option Explicit

Option Explicitを使用すれば、未定義変数の使用を防ぎ、スペルミスや予期せぬエラーを防ぐことができます。

 

Excel VBA Debug.Print

Debug.Printを使って出力した内容は、実行中のVBAエディタのイミディエイトウィンドウに表示します。

 

Debug.Printの使い方

デバッグしたい箇所でDebug.Printを使って、変数の値や式の結果を出力します。

Sub ExampleDebugPrint()
    Dim x As Integer
    x = 5
    Debug.Print "x の値: " & x ' x の値をイミディエイトウィンドウに出力
    Debug.Print "x * 2: " & x * 2 ' x * 2 の結果をイミディエイトウィンドウに出力
End Sub

イミディエイトウィンドウに `x の値: 5` と `x * 2: 10` 表示します。

 

Excel VBA Stopステートメント

Stopステートメントは、コードの実行を強制的に停止させるために使います。

 

Stopステートメントの使い方

Stopステートメントをコード内の特定の場所に挿入します。実行がその部分に到達すると、実行が停止します。

 

Sub ExampleStopStatement()
    Dim x As Integer
    x = 5
    ' ここにStopステートメントを挿入する
    Stop ' ここで実行が停止し、変数xの値を確認できる
    x = x + 10
    MsgBox x
End Sub

Stopステートメントで、マクロを実行すると、`Stop`の部分で実行が停止し、変数 `x` の値を確認できます。

 

Excel VBA ステップ実行

ステップ実行は、VBAコードを一行ずつ実行しながら進め、その間に変数の値やプログラムの実行状態を確認するデバッグ手法です。

 

ステップ実行

デバッグしたいコードにブレークポイントを設定します。これはコードの実行を一時停止させる場所を指定するものです。

VBAエディタでF8キーを押すか、「実行」タブから「ステップ実行」を選択します。一行ずつコードが実行され、その過程で変数の値やプログラムの実行状態を確認できます。

 

Excel VBA TypeName関数

TypeName 関数は、変数やオブジェクトの型を文字列として返す組み込み関数です。

 

TypeName 関数はの使い方

TypeName 関数は、変数やオブジェクトを引数として受け取ります。TypeName(variable)の形で使用します。

 

Sub ExampleTypeName()
    Dim var1 As Integer
    Dim var2 As String
    Dim var3 As Object
    
    var1 = 10
    var2 = "Hello"
    Set var3 = Worksheets("Sheet1")
    
    Debug.Print TypeName(var1) ' Integerを出力
    Debug.Print TypeName(var2) ' Stringを出力
    Debug.Print TypeName(var3) ' Worksheetを出力
End Sub

TypeName 関数を使って3つの異なる変数の型を調べ、その結果をデバッグウィンドウに出力しています。

 

Excel VBA IsNumeric関数

IsNumeric関数は、指定された式が数値を表すかどうかを評価し、結果を真偽値(TrueまたはFalse)で返す組み込み関数です。

IsNumeric 関数はの使い方

IsNumeric 関数は、数値を判定したい式を引数として受け取ります。IsNumeric(expression)の形で使用します。

 

Sub ExampleIsNumeric()
    Dim num1 As Variant
    Dim num2 As Variant
    Dim text As Variant
    
    num1 = 10
    num2 = "15"
    text = "Hello"
    
    Debug.Print IsNumeric(num1) ' Trueを出力
    Debug.Print IsNumeric(num2) ' Trueを出力
    Debug.Print IsNumeric(text) ' Falseを出力
End Sub

IsNumeric 関数を使って3つの異なる式の数値評価を行い、その結果をデバッグウィンドウに出力しています。数値である num1 と "15" は True を返し、文字列である text は False を返します。

Excel VBAのスキルを活かして、開発者としてのキャリアを築いてみませんか?

当サイトでは、Excel VBAエキスパート認定資格取得に向けた情報を提供しています。興味がある方は、ぜひ以下の問題集からチャレンジしてみてください。

 

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。