ステップ実行 〜マクロを1行ずつ実行〜

1. まずは、やってみよう


以下の Macro1 をステップ実行してみましょう。準備として、Visual Basic Editor を使い、新規ブックに標準モジュールを挿入し、以下のマクロのコードをコピー貼り付けしてください。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2006/6/19  ユーザー名 : pou
'

'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Hello World"
    Range("A2").Select
End Sub

ステップ実行の開始方法はいくつもありますが、今回は Excel のメニュー [ツール]-[マクロ]-[マクロ] の [ステップイン] ボタンを使ってみます。

ステップ実行が始まり、マクロの1行目が黄色く反転します。

現在の行を実行し、次の行に進むには F8 キーを押します。

F8 キーを押して進み、マクロの最後の行(End Sub)を実行すると、黄色い反転表示が消え、ステップ実行が終了します。

2. シートの状態とプロパティや変数の内容を確認する


ステップ実行をしながら、シートの状態を確認することができます。

コードの上にマウスポインタを持って行くと、プロパティや変数の内容がポップアップ表示されます。

イミディエイトウィンドウで「?プロパティ」や「?変数名」と入力して Enter キーを押すとその内容が表示されます。

ステップ実行のQ&A


Q. 特定の行まで一気に実行するには?
次に停止したい行にキーボードカーソルを置き、Visual Basic Editor のメニュー [デバッグ]-[カーソル行の前まで実行](ショートカットキーは Ctrl+F8)を実行します。
Q. 特定の行にジャンプするには?
ジャンプしたい行にキーボードカーソルを置き、[デバッグ]-[次のステートメントの設定](ショートカットキーは Ctrl+F9)を実行します。
Q. ステップ実行を終了させるには?
残りのマクロを最後まで一気に実行するには、[実行]-[継続](ショートカットキーは F5)を実行します。

マクロを打ち切って終了させるには、[実行]-[リセット] を実行します。

Q. イベントプロシージャのように、マクロ実行のダイアログボックスには表示されない場合、ステップ実行を開始するにはどうすればよいのですか?
特定の行にブレークポイントを設定しておくと、その行からステップ実行を開始することができます。ブレークポイントを設定するには、行にキーボードカーソルを置いて F9 キーを押します。設定を解除するにはもう一度 F9 キーを押します。すべてのブレークポイントを解除するには、[デバッグ]-[すべてのブレークポイントの解除](ショートカットキーは Ctrl+Shift+F9)を実行します。

ブレークポイントはブックファイルに保存されるので、マクロが完成したら、すべてのブレークポイントの解除を行い、ブックを保存し直すようにしてください。

ブレークポイントの代わりに、コード中に Stop ステートメントを書いても、マクロ実行を中断することができます。

Q. ステップイン(F8)とステップオーバー(Shift+F8)の違いは?
別のプロシージャを呼び出すコードを実行するとき、ステップインは呼び出されるプロシージャの中も一行ずつ実行します。ステップオーバーは呼び出されるプロシージャを一気に実行して次の行へ進みます。
Q. ステップ実行中にコードを書き換えると「このアクションを実行するとプロジェクトがリセットされます。実行しますか?」と表示されることがあります。なぜでしょうか
コードを書き換えるとマクロ実行が終了してしまうことがあります。コードブロック(If〜End If、For〜Next、Do〜Loopの間など)を実行しているときは、ブロックの外にジャンプする(次に実行するステートメントをブロックの外に設定する)と変更できる場合があります。
Q. 「デバッグ」とは何ですか?
プログラムの誤りをバグと言います。デバッグとはバグを取り除くこと、つまり、プログラムを正しく動作するように修正することです。

VBAでは、実行時エラーが発生すると、[終了] か [デバッグ] を選択するダイアログボックスが表示され、[デバッグ]を選択するとデバッグモード(中断モードとも言います)になり、エラーの行からステップ実行を開始できる状態になります。ここでコードを修正して実行を再開することもできます。

Q. ウォッチ式とは何ですか?

ウォッチ式に変数やプロパティなどを含む式を登録すると、その式の結果を常に監視し、変化したときにマクロ実行を中断することができます。

例えば、あるプロパティが特定の値になるコード箇所を知りたい場合、そのプロパティに関係するコードが何行あっても、ウォッチ式にプロパティをチェックする条件式を一つ登録するだけで、見つけ出すことができます。


戻る