-
∨目次
- Exit For
- Exit Do
- Exit Sub
- Exit Function
VBA Exit 文で処理を抜ける
はじめに
Excel VBA マクロの Exit 文で For や Sub などの処理を抜ける方法を紹介します。
Exit For のようにして、For 文を抜けます。
Exit Do のようにして、Do 文を抜けます。
Exit Sub のようにして、Sub 関数を抜けます。
Exit Function のようにして、Function 関数を抜けます。
Exit Property のようにして、プロパティを抜けます。
ループで目的の処理をした後や、関数の引数が不正なときなど用途はいろいろあります。
-
目次
- Exit For
- Exit Do
- Exit Sub
- Exit Function
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
戻り値はその時点の値になるので、処理を抜ける前に戻り値を設定します。
引数が不正な値のときや、処理を終了したいときに使用します。