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

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

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