更新日:、 作成日:

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

戻り値はその時点の値になるので、処理を抜ける前に戻り値を設定します。

引数が不正な値のときや、処理を終了したいときに使用します。