目次

動作の違い

VBE(Visual Basic Editor)のデバッグのメニューの中に、ステップイン、ステップオーバー、ステップアウトのコマンドがありますが、その動作の違いをテストしてみました。

VBE を起動した元のアプリケーションは Excel です。

VBE(Visual Basic Editor)のデバッグのメニューの中に、ステップイン( F8 キー)、ステップオーバー( Shift + F8 キー)、ステップアウト( Ctrl + Shift + F8 キー)があります。
VBE(Visual Basic Editor)のデバッグのメニューの中に、ステップイン( F8 キー)、ステップオーバー( Shift + F8 キー)、ステップアウト( Ctrl + Shift + F8 キー)があります。

目次まで戻る

題材のマクロ

下記のマクロでテストしてみます。「最初に実行するマクロ」から「呼び出されるマクロ」を実行しています。

Sub 最初に実行するマクロ() '1 行目
    Debug.Print "最初に実行するマクロ" '2 行目
    Call 呼び出されるマクロ '3 行目
End Sub '4 行目
Sub 呼び出されるマクロ() '5 行目
    Debug.Print "呼び出されるマクロ" '6 行目
End Sub '7 行目

目次まで戻る

ステップインの場合

ステップインは「F8」キーを押す度に、一行分のマクロを実行して、そこでマクロが一時停止するようです。

ステップインは呼び出すマクロ(関数)の中に入っていきます。上記マクロの場合、 2,3,5,6,7,4 行目の順番でマクロが一時停止しました。

ユーザーの操作と、その時の VBE のコードウィンドウの状態を表にしてみました。

ユーザーの操作 その時の VBE のコードウィンドウの状態
マクロの 1 行目で「F8」キーを押す
マクロの実行が開始されました。
マクロの実行が開始されました。
「F8」キーを押す
2 行目に進みました。
2 行目に進みました。
「F8」キーを押す
3 行目に進みました。
3 行目に進みました。
「F8」キーを押す
5 行目にジャンプしました。
5 行目にジャンプしました。
「F8」キーを押す
6 行目に進みました。
6 行目に進みました。
「F8」キーを押す
7 行目に進みました。
7 行目に進みました。
「F8」キーを押す
4 行目に戻りました。
4 行目に戻りました。
「F8」キーを押す
マクロが終了しました。
マクロが終了しました。

VBE のイミディエイトウィンドウに以下の内容が出力されました。「呼び出されるマクロ」が実行されたようです。

最初に実行するマクロ
呼び出されるマクロ

目次まで戻る

ステップオーバーの場合

ステップオーバーは「Shift+F8」キーを押す度に、一行ずつ進んでマクロが一時停止しますが、呼び出すマクロ(関数)の中に入っていかないようです。

上記マクロの場合、 2,3,4 行目の順番でマクロが一時停止しました。

ユーザーの操作 その時の VBE のコードウィンドウの状態
マクロの 1 行目で「F8」キーを押す
マクロの実行が開始されました。
マクロの実行が開始されました。
「Shift+F8」キーを押す
2 行目に進みました。
2 行目に進みました。
「Shift+F8」キーを押す
3 行目に進みました。
3 行目に進みました。
「Shift+F8」キーを押す
4 行目に進みました。
4 行目に進みました。
「Shift+F8」キーを押す
マクロが終了しました。
マクロが終了しました。

VBE のイミディエイトウィンドウに以下の内容が出力されました。呼び出すマクロの中で一時停止しませんでしたが、「呼び出されるマクロ」は実行されたようです。

最初に実行するマクロ
呼び出されるマクロ

目次まで戻る

ステップアウトの場合

ステップアウトは一時停止無しでマクロ完了まで進むようです。ステップアウトは「Ctrl+Shift+F8」キーを押します。

ユーザーの操作 その時の VBE のコードウィンドウの状態
マクロの 1 行目で「F8」キーを押す
マクロの実行が開始されました。
マクロの実行が開始されました。
「Ctrl+Shift+F8」キーを押す
マクロが終了しました。
マクロが終了しました。

VBE のイミディエイトウィンドウに以下の内容が出力されました。「呼び出されるマクロ」は実行されたようです。

最初に実行するマクロ
呼び出されるマクロ

目次まで戻る

呼び出し先のマクロでマクロを呼び出した場合

下記マクロ「A」をステップオーバーで実行してみると、 2,3,4,5,6 行目の順番でマクロが一時停止しました。

Sub A() '1 行目
Debug.Print "START" '2 行目
Debug.Print "A 実行" '3 行目
Call B '4 行目
Debug.Print "END" '5 行目
End Sub '6 行目

Sub B()
Debug.Print "B 実行"
Call C
End Sub

Sub C()
Debug.Print "C 実行"
End Sub

イミディエイトウィンドウには以下の内容が出力されました。

START
A 実行
B 実行
C 実行
END

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿