Excel VBA スタンダードの暗記項目まとめ【第十章 デバッグ】

8月 7, 2020Excel VBA スタンダード

この記事では、VBAエキスパートの「Excel VBA スタンダード」の受験用に、暗記すべき項目について、公式の試験範囲の第十章をまとめました

とくに暗記すべきところは「太文字」や「」でまとめてあります。とくにステートメントやメソッド、プロパティについては、記述できるレベルまで仕上げておくことをおすすめします。

この記事では暗記を優先するため、解説をできるだけ省いています。学習未経験の人は、Excel VBA スタンダードの公式テキストなどで試験範囲の内容に目を通してからの利用を推奨します。

また、公式テキストに掲載されていないなど、試験に出る可能性の低い内容の解説は、基本的に割愛しています。

Excel VBA スタンダード 第十章 デバッグ

前提知識

試験範囲として明確ではありませんが、第九章同様に「文法エラー」と「論理エラー」が公式テキストで紹介されているので、念のため記載しておきます。

文法エラー(公式テキストの第九章では「記述エラー」の表記)とは、VBAの構文として誤っているエラーです。

論理エラーはVBAの文法には問題はないが、論理的な矛盾があることによるエラーです。具体的には、存在しないシートを参照するなどが、論理エラーにあたります。

また、論理エラー発生時には、下の図のようなダイアログボックスが表示されます。

論理エラーでダイアログボックスが表示されている例

ダイアログボックスに表示されている「デバッグ」のボタンをクリックすると「デバッグモード」になり、下の図のように実行できなかった行が黄色になります。

デバッグモードの画面

10.1 Debug.Print

イミディエイトウインドウ(詳細は後述します)に、マクロから情報を出力するには、DebugオブジェクトのPrintメソッドを利用します。

Debug.Print 出力内容」のように記述して実行します。

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

イミディエイトウインドウは、マクロの情報の表示やVBAの処理を命令できるウィンドウです。

基本的には、マクロが一時停止した状態でデバッグのために利用するウインドウですが、マクロを実行していない状況でも利用できます。イミディエイトウインドウを表示する場合、ショートカットキーは「Ctrl + G」になります。

イミディエイトウインドウにVBAで実行したい処理を記述し、Enterを入力することで、処理を実行することができます

例えばイミディエイトウインドウに「MsgBox “イミディエイトウインドウ"」とすれば、メッセージボックスに「イミディエイトウインドウ」と表示できますし「Sheets(“Sheet1").Range(“A1").Value = “マントヒヒ"」とすれば、Sheet1のセルA1に「マントヒヒ」と入力可能です。

また「?表示したい情報」とすることで、表示したい情報をイミディエイトウインドウに表示させることができます。変数に格納されている値などを確認したい場合に利用できます。

イミディエイトウインドウで変数を利用する場合、VBEのオプションで変数の宣言を強制しておいた場合でも、変数の宣言が不要です(宣言なしで宣言と同じ状態になっているため「暗黙の宣言」といいます)。

逆にイミディエイトウインドウで「Dim A As Integer」のように宣言すると、エラーになります

10.3 ブレークポイントとステップ実行

ブレークポイント

ブレークポイントはマクロを一時停止させるために利用できます。

ブレークポイントの設定は、ブレークポイントを仕掛けたい位置にカーソルを置き「F9」キーを押下するか、ブレークポイントを仕掛けたい行の左側をクリックすることで設定できます。

ブレークポイントを設定すると、以下のように設定した行が着色され、左側に「●」の印が付きます。

Stopステートメント

Stopステートメントは、コードの途中に「Stop」と記述し、マクロの処理を停止させる目的で利用できます。

実行すると、下の図のようにStopステートメントの位置が黄色く反転し、処理が一時停止します。

ステップ実行

マクロを1行ずつ実行していくことをステップインと呼びます。ステップ実行は、実行したいプロシージャにカーソルを置いた上で、VBEの「ステップイン」を選択するか、F8キーで実行できます。

TypeName関数(デバッグでよく使う関数)

TypeName関数は、変数の型を調べる目的で利用できます。具体的には「TypeName(調べたい値)」の形で記述します。

Sub Macro1()
    Dim Zoo As Object
    Set Zoo = CreateObject("Scripting.Dictionary")
    MsgBox TypeName(Zoo)
End Sub

上の例のコードを実行すると、以下のように表示されます。

TypeName関数を利用した型の確認の例

試験範囲外の補足

例で利用したDictionary型は、公式テキストでは登場しません。またObject型の変数は、宣言のみを行った状態(上のコードだと2行目時点)で型を確認すると「Nothing」になります。

IsNumeric関数(デバッグでよく使う関数)

IsNumeric関数は、指定した値が数値かを判断できます。「IsNumeric(確認したい値)」の形で記述し、具体的なコードは以下のようになります。

Sub Macro1()
    MsgBox IsNumeric("マントヒヒ")
End Sub

上の例では、確認したい値が文字列なので、結果は「False」と表示されます。

IsDate関数(デバッグでよく使う関数)

IsDate関数は、指定した値が日付か判断できます「IsDate(確認したい値)」の形で記述し、セルに対して利用する場合「IsDate(Range(“A1").Value)」のように記述します。

結果は、セルに代入されている値が文字列なら「False」、シリアル値なら「True」になります


<<第九章 エラー対策へ | 第一章 プロシージャへ>>


Excel VBA スタンダードの暗記項目まとめ一覧へ