【VBA】デバッグのやり方を初心者向けに解説
今回はVBAでデバッグを行う基本的な方法を紹介します。
デバッグの基本である、どこで止めるか、何を確認するか、を中心に説明していきます。
止める方法や確認する方法についても併せて説明するので、安心して読んでください。
1. デバッグはどこで止めるのが良いのか
プログラムを途中で止める方法
先にプログラムを途中で止める2つの方法を紹介します
ブレークポイントで止める
1つはブレークポイントで止める方法です。
VBEで左のねずみ色のところをクリックすると、ブレークポイントを設定することができます。
Stopステートメントで止める
もう1つはStopステートメントで、プログラム内でStopと記述すると、その箇所で止まります。
デバッグのコツ:ループと自作関数の前後で止める
Sub OutputRndNum()
'A1~A10のセルに1~10の整数をランダムに入力
Dim row_i As Long
Stop
For row_i = 1 To 10
Randomize '乱数ジェネレータの初期化
Cells(row_i, 1) = RtnRndNum(10)
Stop
Next
End Sub
Function RtnRndNum(maxNum As Long) As Long
'1~maxNumの整数をランダムに返す
RtnRndNum = Int((maxNum * Rnd) + 1)
End Function
デバッグで止めるのは、ループ前後と自作関数の前後を推奨します。
上のサンプルコードではForループの直前で止め、Nextで次のループへ進む前に止めています。
ループは少しでも書き間違えると想定外の動作をするため、一旦止めてステップ実行しながら確認を進めましょう。
また、このプログラムではRtnRndNumという自作関数を用いています。
自作関数の前でも一旦止め、想定した返り値が返されているか確認することを推奨します。
2. デバッグは何を確認すれば良いのか
デバッグでは変数の中身が正しいかを確認するのが基本です。
まずは変数の中身を確認する方法を紹介します。
変数の中身を確認する方法(配列/オブジェクト以外)
Long型やString型といった配列/オブジェクト以外では、変数にマウスカーソルを近づけることで変数の中身を調べることができます。
繰り返し確認したい場合は、変数を右クリックして「ウォッチ式の追加」を選択してください。
ウォッチウィンドウに変数の値が常に表示されます。
Debug.Printによって変数の中身をイミディエイトウィンドウに表示する方法もあります。
変数の中身を確認する方法(配列/オブジェクト)
配列/オブジェクト変数の中身を確認する場合はウォッチウィンドウを使用します。
目的のオブジェクトを取得できているかは、NameプロパティやValueプロパティを確認してみてください。
大抵のオブジェクトはこの辺りを見ると目的のオブジェクトか判断することができます。
デバッグのコツ:確認するのは受け渡しされる変数
確認のコツは、受け渡しされる変数を調べることです。
長いプログラムになると、1つの処理のブロックから次のブロックへと変数を通じて結果が受け渡しされていきます。
この受け渡しされる変数を重点的に調べるのです。
この変数の中身が正しければ、そのブロックまでの処理は正常に動作していると判断できるので、ここまではOKとして次のブロックの確認へと進みます。
この作業を繰り返していくことによって、どのブロックに問題があるのかを炙り出していくことができる訳です。