【ExcelVBA】デバッグ
デバッグ
デバッグ(debug)とは、プログラムのバグやエラーを見つけて修正し、正しく動く状態にする作業のことをいいます。プログラムを初めて作る方は、プログラムが自分の思ったように動いてくれず何度も何度も作りなおすことになるのではないかと思います。このつくり直す作業もデバッグになります。
今回は、VBAでこのデバッグ作業をするための方法を紹介していきます。
ブレークポイント
マクロのコードの中にブレークポイントを設定すると、マクロを実行したときにそのブレークポイントの直前で一時停止します。このように一時停止した状態をデバッグモードと呼び、次回紹介するイミディエイトウィンドウと組み合わせることで強力なデバッグ作業を行うことができます。
次のプログラムは以前作成したものです。プログラムの中身に関しては「For…Nextステートメント5」の記事を参照してください。
Sub VBA基礎第13回() Dim objOutlook As Object Dim objMail As Object Set objOutlook = CreateObject("Outlook.Application") Dim i As Integer For i = 2 To 11 Set objMail = objOutlook.CreateItem(0) objMail.To = Cells(i, 2).Value objMail.Subject = Cells(i, 3).Value objMail.Body = Cells(i, 4).Value & Cells(2, 7).Value objMail.Send Set objMail = Nothing Next Set objOutlook = Nothing MsgBox "送信完了", vbInformation End Sub
ブレークポイントはプログラムを実行する前にあらかじめ設定しておきます。一時停止したいところに設定します。
今回は13行目で設定してみましょう。
以下の図を見てください。赤枠になっている部分をクリックします。これでその行が網掛けになりブレークポイントが設定されたことを意味します。
[013-【ExcelVBA】デバッグ-001.png]
では、いつも通りにプログラムを実行してみましょう。
[013-【ExcelVBA】デバッグ-002.png]
このように、先ほどブレークポイントを設定した行が黄色の網掛けとなります。
この網掛けの部分が現在実行中の行(正確には実行する直前)となり、12行目までは実行が完了していることになります。
では、次に「F8」キーを入力してください。
黄色の行が1行先に進みます。これで、13行目が実行され新たに14行目が実行直前の状態になりました。
このようにプログラムを1行ずつしていくことを「ステップ実行」といいます。
ではさらに、「F8」キーを2回入力します。
[013-【ExcelVBA】デバッグ-004.png]
これで「objMail.Send」が黄色の網掛けとなります。まだこの処理は実行する直前ですので、まだメールが送信されていません。
ではさらに、「F8」キーを1回入力しましょう。
[013-【ExcelVBA】デバッグ-005.png]
これでメール送信が完了しているはずです。受信出来ているかを確認してみましょう。
また、さらに「F8」キーを2回入力してみましょう。
[013-【ExcelVBA】デバッグ-006.png]
「Next」まで処理が進むと、次に繰り返しの最初に戻っていることが分かるかと思います。
このようにForのようなループ構文をデバッグするときにも非常に便利です。
継続実行と中断
ステップ実行は便利ですが、1行ずつ実行していきますのでプログラムの量が増えてくると使いにくいなと感じることが増えてきます。
(上記のような比較的コード量の少ないプログラムであれば、ステップ実行だけで充分です。)
その場合、継続実行という機能が便利です。
何度か「F5」キーを入力するか継続ボタンをクリックしてみてください。
[013-【ExcelVBA】デバッグ-007.png]
これは、先ほどのステップ実行のように1行ずつ処理が進んでいくのではなく、次のブレークポイントかプログラムが終了するまで処理が進行していきます。
プログラムを停止させてしまうことも可能です。
この場合は、リセットボタンをクリックしてみてください。
[013-【ExcelVBA】デバッグ-009.png]
これでプログラムが停止します。
まとめ
今回はデバッグについて紹介しました。
ブレークポイントはプログラムの実行を一時停止するポイントのことです。
ステップ実行は一時停止したプログラムを1行ずつ実行していくことです。
継続実行は次のブレークポイントかプログラムの終了まで一気に処理を進めることです。
中断はプログラムの実行を停止することです。
どのテクニックも非常に有用でよく使うものになりますので、実際に動作を見ながら行ってみてください。
確認問題
以下の「○○○○」に当てはまる文言を解答してください。
デバッグ(debug)とは、プログラムの○○○や○○○を見つけて修正し、正しく動く状態にする作業のことをいいます。
プログラムを一時停止するポイントのことを○○○といいます。
一時停止したプログラムを1行ずつ実行することを○○○といいます。
継続実行は次のポイントまで一気に処理を進めることで、中断はプログラムの実行を○○○することです。
次回は、イミディエイトウィンドウです。