Excel 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
上の例のコードを実行すると、以下のように表示されます。
試験範囲外の補足。
例で利用したDictionary型は、公式テキストでは登場しません。またObject型の変数は、宣言のみを行った状態(上のコードだと2行目時点)で型を確認すると「Nothing」になります。
IsNumeric関数(デバッグでよく使う関数)
IsNumeric関数は、指定した値が数値かを判断できます。「IsNumeric(確認したい値)」の形で記述し、具体的なコードは以下のようになります。
Sub Macro1()
MsgBox IsNumeric("マントヒヒ")
End Sub
上の例では、確認したい値が文字列なので、結果は「False」と表示されます。
IsDate関数(デバッグでよく使う関数)
IsDate関数は、指定した値が日付か判断できます「IsDate(確認したい値)」の形で記述し、セルに対して利用する場合「IsDate(Range(“A1").Value)」のように記述します。
結果は、セルに代入されている値が文字列なら「False」、シリアル値なら「True」になります。
<<第九章 エラー対策へ | 第一章 プロシージャへ>>