更新日:、 作成日:
VBA Exit 文で処理を抜ける
はじめに
Excel VBA マクロの Exit 文で For や Sub などの処理を抜ける方法を紹介します。
Exit For のようにして、For 文を抜けます。
Exit Do のようにして、Do 文を抜けます。
Exit Sub のようにして、Sub 関数を抜けます。
Exit Function のようにして、Function 関数を抜けます。
Exit Property のようにして、プロパティを抜けます。
ループで目的の処理をした後や、関数の引数が不正なときなど用途はいろいろあります。
Exit For
Exit For を入力します。すべての種類の For を抜けられます。他の言語にある Break と同じことができます。
Dim i As Integer
For i = 1 To 5
If i = 3 Then ' i が 3 になったら
Exit For ' For を抜ける
End If
Debug.Print(i) ' 1 2
Next
' Exit For の後はここから処理が行われる
Dim w As Worksheet
For Each w In Worksheets
If w.Name = "Sheet3" Then ' シート名が Sheet3 だったら
Exit For ' For を抜ける
End If
Debug.Print(w.Name) ' Sheet1 Sheet2
Next
' Exit For の後はここから処理が行われる
ループを続行できなくなったときや、ループする必要がなくなったときに使用します。
For が入れ子になっているときにすべての For を抜けたいときは、フラグを用意するとできます。デバッグして処理を追うと動きがよくわかります。
Dim list1(3) As Boolean
Dim list2(3) As Boolean
list1(1) = True ' この True を見つけたら処理を抜ける
list2(2) = True ' この True を見つけたら処理を抜ける
Dim i As Integer
Dim j As Integer
Dim フラグ As Boolean
For i = LBound(list1) To UBound(list1) ' For 1
Debug.Print("i = " & i)
For j = LBound(list2) To UBound(list2) ' For 2
Debug.Print(" j = " & j)
If (list1(i) = True) And (list2(j) = True) Then
Debug.Print("見つけた i = " & i & ", j = " & j)
フラグ = True ' Exit For で抜けたフラグ
Exit For ' For 2 を抜ける
End If
Next
If フラグ = True Then ' For 2 を抜けていたら
Exit For ' For 1 も抜ける
End If
Next
Exit Do
Exit Do を入力します。すべての種類の Do を抜けられます。
Dim i As Integer
i = 0
Do While i < 5
i = i + 1
If i = 3 Then ' i が 3 になったら
Exit Do ' Do を抜ける
End If
Debug.Print(i) ' 1 2
Loop
' Exit Do の後はここから処理が行われる
ループする必要がなくなったときに使用します。
Do Loop で無限ループしているときは「If 文」を終了条件にできます。
Dim i As Integer
i = 0
Do
i = i + 1
If i = 3 Then ' i が 3 になったら
Exit Do ' Do を抜ける
End If
Debug.Print(i) ' 1 2
Loop
' Exit Do の後はここから処理が行われる
Do が入れ子になっているときにすべての Do を抜けたいときは、フラグを用意するとできます。詳細は上記の「For 文を抜ける」と同じです。
スポンサーリンク
Exit Sub
Exit Sub を入力します。そこで Sub 関数を抜けられます。他の言語にある Return と同じことができます。
Sub サブ(ByVal i As Integer)
If i = 0 Then
Exit Sub ' ここで関数を抜ける
End If
Debug.Print(i) ' i が 0 のとき、この処理は行われない
End Sub
引数が不正な値のときや、処理を終了したいときに使用します。
Exit Function
Exit Function を入力します。そこで Function 関数を抜けられます。他の言語にある Return と同じことができます。
Function ファンクション(ByVal i As Integer) As Boolean
If i = 0 Then
ファンクション = False ' 不正なときの戻り値
Exit Function ' ここで関数を抜ける
End If
Debug.Print(i) ' i が 0 のとき、この処理は行われない
ファンクション = True ' 正常なときの戻り値
End Function
戻り値はその時点の値になるので、処理を抜ける前に戻り値を設定します。
引数が不正な値のときや、処理を終了したいときに使用します。