VBAのステップインなどのデバッグコマンドの使い方を初心者向けに丁寧に解説します

こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も「時間クリエーター」としてバシバシ時短に取り組んでます!

ブログラムを開発するうえで避けて通れないのがバグです。間違いなく書いたつもりでも、いざプログラムを動かしてみると、エラーが出て上手く動かないことはよくあることです。

そのバグを正しく動作するように直す作業がデバッグですね。初めからバグが全くないプログラムなんてないですから、いかにデバッグ作業を効率的に行うかがプログラム開発では重要になってきます。

そこで今日は、初心者にとってわかりにくい「VBAのデバックコマンドの使い方」をゆっくり丁寧に解説していきます。

レクタングル大336×280

デバッグの基本となる4つのメニュー

まずはデバッグメニューを表示させてみましょう。メニューバーの「デバッグ」をクリックすると、デバッグ関係のメニューが表示されます。

う~ん。ステップイン、ステップアウト、ステップオーバー?何が違うんだろう?初めのうちは同じような言葉が多くて良く分かりませんよね。

まずはデバッグの基本となる、

  • ステップイン
  • ステップオーバー
  • ステップアウト
  • カーソル行の前まで実行

から説明していきますね。

サンプルプログラムでデバッグしてみる

それではサンプルプログラムを動かしながら、実際にデバッグをしていきます。

テストボタンを押すと、行番号に10をかけた数字をA列に入れていくというプログラムです。10行目まで処理をしたらプログラムが終了します。

プログラムの流れは以下のようになります。

  1. シートモジュールのボタンクリックイベントからPutNumberを呼び出す
  2. 行番号を引数としてAddNumberに渡す
  3. 行番号に10かけた数字を戻り値として返す
  4. セルに戻り値を入れる
  5. 2~4までの処理を10回繰り返す
  6. メッセージボックスに処理行を表示させる

ブレークポイントを設定する

ブレークポイントを設定することで、設定した場所でプログラムを一時停止することができます。今回ははじめからプログラムの動きを追いたいので、コマンドボタンがクリックされた直後、PutNumberを呼び出すところにブレークポイントを設定します。

Call PutNumberの左をクリックすると●がつきます。これでブレークポイントが設定されました。この状態で「テスト」ボタンをクリックしてプログラムを動かします。

それではデバッグの基本となる4つのメニューの説明をしていきます。

ステップイン

ステップインは1行ずつプログラムを実行していきます。途中にある呼び出しプロシージャ内も全て実行します。ステップインはデバッグの基本となりますのでぜひ覚えましょう。

F8キーを1回ずつ押していくと、数字で示した順番にプログラムを1行づつ実行していきます。

ステップインの良いところは、1行ずつ実行していくのでプログラムの動きへの理解が深まることです。

ステップオーバー

続いてステップオーバーです。Shiftキー+F8を押して進めていきます。

ステップオーバーも1行ずつプログラムを実行していくのですが、呼び出しプロシージャがあった場合、その中には入らずに次の行に進みます。

①の位置でステップオーバーを実行した場合、AddNumberに入らずに②Next yに進み、その後①に戻ります。

今回のプログラムは、Forによる繰り返しが10回だけなのでまだよいのですが、これが100、1000回の繰り返しになったときを考えみてください。

その都度、ステップインでプロシージャ内まで1行ごとに実行していたら、暮れてしまいますよね。

このようにステップオーバーは、プログラムの全体的な流れを追いたいだけで、呼び出しプロシージャの中まではチェックしなくて良いときなどに使います。

ステップアウト

続いてステップアウトです。Ctrキー+Shiftキー+F8を押して進めます。

ステップアウトはプロシージャの終わりまで一気に処理を実行します。呼びだしプロシージャ内に入り、ある程度動きを確認したあとに、プロシージャから出たい時などに使われます。

プロシージャPutNumberの①でステップアウトを実行すると、PutNumberの最後まで一気に処理が実行され、メッセージボックスが表示されたあと、ボタンクリックイベントの②End Subまで処理が行われます。

カーソル行の前まで実行

最後に「カーソル行まで実行」についてです。Ctrキー+F8を押して進めます。

「カーソル行の前まで実行」はカーソルが置かれている行の一行前まで、一気に処理を実行します。この時まだカーソル行の処理は行われていないので注意してください。

For文やDo Loop文などの繰り返し処理の中から抜けたい時などに利用します。ループの中でステップオーバーを使っても10回ボタンを押すのは面倒ですからね~。

①の位置にポインタがある時に、②の位置でマウスをクリックしてカーソルを合わせた場合を例にしています。

「カーソル行の前まで実行」を行うことで、For文を一気に実行してメッセージボックス表示の手前まで処理が実行されます。そのあと、「ステップイン」を実行することでメッセージボックスが表示されます。

以上でデバックメニューの使いたかの説明を終わります。

まとめ

いかがでしたか?今回はVBAのデバッグメニューの使い方の説明をしました。4つの基本操作を使い分けて効率よくデバッグしてみましょう~。

  • ステップイン 1行づつ実行する
  • ステップオーバー 呼び出しプロシージャの処理を一気に実行する
  • ステップアウト プロシージャの最後まで一気に処理を実行する
  • カーソルの前まで実行 カーソルの手前行まで一気に処理を実行する

以上おつかれさまでした~。

一歩進んでデバッグの応用編の記事はこちら

エクセルVBAでイミディエイトウィンドウを使ってデバッグする方法
イミディエイトウィンドウはデバッグ役立つ便利な機能が備わっています。例えば、プログラムの中にある変数や関数の戻り値を表示させる、関数の実行結果を見る、計算をする、エクセルブックやシートなどのプロパティを見るなんてことができちゃいます。