このページの内容について
このページは、VBAエキスパート(ExcelVBAスタンダード)試験合格講座の第六回記事です。公式テキスト第3章「ステートメント」の内容について解説します。自分でも手を動かしながら読み進めてください。主に講座受講者の復習での利用を想定しています。
Exitステートメント
プロシージャを終了させる
プロシージャは通常「End Sub」や「End Function」に到達すると終了します。しかしプロシージャの実行中にもプロシージャを終了させる方法があります。
サンプルコード(クリックでコピー)
Private Sub Test_Exit()
Dim input_val As String
input_val = Application.InputBox("自由入力")
If input_val = "False" Then Exit Sub
Call MsgBox(input_val)
End Sub
実行結果
上記サンプルコードはInputBoxでユーザーからの入力を受け付けます。キャンセルボタンを押した場合、InputBoxは「False」を返します。キャンセルボタンが押された場合、Msgboxは実行されず、Subプロシージャを終了します。OKボタンが押された場合、入力内容をそのままメッセージに表示します。
マクロの動作を終了させることはできない
「Exit Sub」「Exit Function」はプロシージャを終了させるステートメントです。マクロを終了させるわけではありません。そのため、呼び出し先のExitステートメントは呼び出し元に影響しません。
サンプルコード(クリックでコピー)
Private Sub Test_CallExit()
Call MsgBox(CalledExit("呼び出し先でExitしてもこのメッセージは表示される"))
End Sub
Private Function CalledExit(ByVal val)
CalledExit = val
Exit Function
End Function
実行結果
上記サンプルコードは「Test_CallExit」を実行すると「CalledExit」という関数を呼び出します。CalledExitでは、渡された引数をそのまま呼び出し元に返した後「Exit Function」でプロシージャを終了させます。このとき、Exitステートメントは呼び出し元には影響せず、Test_CallExitは返された値をメッセージで出力します。
補記:マクロを終了させるには
「Exit Sub」「Exit Function」は呼び出し元に影響しません。呼び出し先でマクロの動作を終了させたい場合、Endステートメントを使用します。
サンプルコード(クリックでコピー)
Private Sub Test_CallEnd()
Call MsgBox(CalledEnd("呼び出し先でEndするとこのメッセージは表示されない"))
End Sub
Private Function CalledEnd(ByVal val)
CalledEnd = val
End
End Function
実行結果
上記サンプルコードは「Test_CallEnd」を実行すると「CalledEnd」という関数を呼び出します。CalledEndでは、渡された引数をそのまま呼び出し元に返した後「End」でマクロを終了させます。Exitステートメントとは異なり、Test_CallEndは返された値をメッセージで出力しません。
繰り返し処理を終了させる
Exitステートメントは繰り返い処理を終了させることもできます。
サンプルコード(クリックでコピー)
Private Sub Test_ExitLoop()
Dim d As Double
Do
d = Rnd
Debug.Print d
If d > 0.9 Then Exit Do
Loop
End Sub
実行結果
上記サンプルコードは、変数dにランダムな0以上1未満の値を代入し、イミディエイトウィンドウに出力します。代入された値が0.9より大きい場合、繰り返し処理を終了させます。
Comment