VBA Exit SubおよびFunction
VBAでは、SubやFunctionを終了させるのに Exit SubまたはExit Functionコマンドを使用します。
Exit Sub
Exit Function
コードの実行がExit Sub または Exit Functionに到達すると、SubまたはFunctionを終了して、他のコードの実行を継続します。
エラー時にSubを終了させる方法を知りたい方は、こちらのリンクをクリックしてください:VBA エラー時にSubを終了する
コード実行全体を終了させる方法を知りたい方は、このリンクをクリックしてください:VBA 全体を終了する
VBAでSubプロシージャを終了させる
この例では、Subの中でExit Subコマンドを使用するとどうなるかを説明します。ExitSubというSubを作成し、その中にExit Subコマンドを記述しています。CallExitSubという SubがこのSubを呼び出します。以下がそのコードです。
Private Sub ExitSub()
Dim i As Integer
For i = 1 To 10
If i = 5 Then
Exit Sub
MsgBox "iの値は" & i
End If
Next i
End Sub
Private Sub CallExitSub()
Call ExitSub
MsgBox "Subを終了します"
End Sub
ExitSubでは、まずiの値が10以下の場合にForループに入ります。
For i = 1 To 10
Next i
その後、iの値が5であるかどうかをIfコマンドでチェックします。値が5であれば、Subを終了して、iの値を表示したメッセージボックスを表示します。
If i = 5 Then
Exit Sub
MsgBox "iの値は" & i
End If
条件を満たさない場合は、次の文でiを1つ増やし、再びForループに入ります。
Next i
CallExitSubでは、まずSub ExitSubを呼び出します。
Call ExitSub
その後、メッセージボックスを返します。
MsgBox "Subを終了します"
CallExitSubを実行すると、最初にExitSubが呼び出されます。このコードをデバッグモードで実行すると、ループを5回通過することがわかります。5回目の繰り返しで、変数iの値が5になり、Ifステートメントの中にコードが入ります。これで、Sub ExitSubが終了してCallExitSubに戻りました。次に実行される行は、MsgBox “Exit Sub” です。
このように、ExitSubは Exit Sub コマンドの直後に終了するので、MsgBox “iの値は” & iは実行されないことになります。
VBAで関数を終了させる
VBAの関数の終了は、Subの終了と似ていますが、コマンドがExit Functionであることが特徴です。この例では、整数を返すExitFuncを作成しました。Sub CallExitFunctionは 、この関数を呼び出します。以下はそのコードです。
Private Function ExitFunc() As Integer
Dim i As Integer
For i = 1 To 10
If i = 5 Then
ExitFunc = i
Exit Function
End If
Next i
End Function
Private Sub CallExitFunction()
Dim intFunc As Integer
intFunc = ExitFunction()
MsgBox "intFuncの値は" & intFunc
End Sub
ExitFuncでは、まずiの値が10以下の場合にForループに入ります。
For i = 1 To 10
Next i
その後、iの値が5と等しいかどうかをIfコマンドでチェックします。もし値が5であれば、iの値を関数resultに代入し、関数を終了します。
If i = 5 Then
ExitFunc = i
Exit Function
End If
条件を満たさない場合は、次の文でiを1つ増やし、再びForループに入ります。
Next i
CallExitFunctionでは、まずExitFuncという関数を呼び出します。そのために、変数intFuncをinteger型で宣言し、ExitFunc関数の結果を代入する必要があります。
Dim intFunc As Integer
intFunc = ExitFunction()
その後、intFunc の値をメッセージボックスに返します。
MsgBox "intFuncの値は" & intFunc
CallExitFunctionを実行すると、まずExitFuncという関数が呼び出されます。このコードをデバッグモードで実行すると、ループを5回通過することがわかります。5回目の繰り返しで、変数iの値が5になり、Ifステートメントの中にコードが入ります。ここでExitFuncの値がiになり、関数が終了してCallExitFunctionに戻ります。次に実行される行は、MsgBox “The value of intFunc is ” & intFunc です。