サイトについて      連絡先   検索

VBA Exit 文

はじめに

Excel VBA の Exit 文を使用して処理を抜ける方法を紹介します。

Exit 文を使用すると関数やループを途中で抜けられます。

条件に一致しないときは関数を実行したくないときや、ループで目的のものを見つけたときに処理を抜けたいときなどに使用します。

Exit の種類

Exit を使って抜けられる処理に次のものがあります。

Exit Sub

Exit Subのようにして、そこで Sub 関数を抜けられます。


Sub Tips(i As Integer)
    If i = 0 Then
        Exit Sub ' ここで関数を抜けます。
    End If
    
    Debug.Print (i) ' i が 0 のとき、この処理は行われません。
End Sub

引数が不正な値のとき関数を実行させたくない、といった使い方をよくします。

Exit Function

Exit Functionのようにして、そこで Function 関数を抜けられます。


Function Found(i As Integer) As Boolean
    If i = 0 Then
        Found = False
        Exit Function ' ここで関数を抜けます。
    End If
    
    Debug.Print (i) ' i が 0 のとき、この処理は行われません。
    Found = True
End Function

引数が不正な値のとき関数を実行させたくない、といった使い方をよくします。

Exit Do

Exit Doのようにして、そこで Do ループを抜けられます。


Sub 実行()
    Dim list(10) As Integer
    list(5) = 100
    Dim i As Integer
    Dim value As Integer

    Do
        i = i + 1
        value = list(i)

        If value <> 0 Then
            Exit Do ' ループを抜ける
        End If
    
        ' 何らかの処理
        Debug.Print (i) ' 1 2 3 4
    Loop
    ' Exit Do の後はここから処理が行われます。

End Sub

ループの中で特定のものを見つけたときにループを抜ける、といった使い方ができます。

Exit For

Exit Forのようにして、そこで For ループを抜けられます。

For NextFor Eachのどちらでも使えます。


Sub 実行()
    Dim list(10) As Integer
    list(5) = 100
    
    Dim i As Integer
    
    For i = 1 To 10
        If list(i) <> 0 Then
            Exit For ' ループを抜ける
        End If
        
        ' 何らかの処理
        Debug.Print (i) ' 1 2 3 4
    Next
    ' Exit For の後はここから処理が行われます。

End Sub

ループの中で特定のものを見つけたときにループを抜ける、といった使い方ができます。

For が入れ子になっているときにすべての For を抜けたいときは、フラグを用意するとできます。デバッグして処理を追うと動きがよくわかります。


Sub 実行()
    Dim list(5, 5) As Integer
    list(2, 3) = 100
     
    Dim i As Integer
    Dim j As Integer
     
    Dim flag As Boolean
     
    For i = 1 To 5
        Debug.Print ("i = " & i)
 
        For j = 1 To 5
            Debug.Print (" j = " & j)
 
            If list(i, j) <> 0 Then
                flag = True ' Exit For で抜けたフラグ
                Exit For ' 1 つ目
            End If
             
            ' 何らかの処理
        Next
        ' 1 つ目の Exit For の後はここから処理が行われます。
 
        If flag = True Then
            ' 1 つ目の Exit For で抜けたとき、こっちの For も抜ける
            Exit For ' 2 つ目
        End If
    Next
    ' 2 つ目の Exit For の後はここから処理が行われます。
 
End Sub

関連ページ