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

VBA Exit 文

はじめに

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

関数や For や Do などの処理を途中で抜けられます。

引数が不正で関数を実行したくないときや、ループで目的のものを見つけたときなど、用途はいろいろあります。

  • 目次
    • Exit の種類
    • Sub 関数を抜ける
    • Function 関数を抜ける
    • Do 文を抜ける
    • For 文を抜ける

Exit の種類

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

すべてその処理を抜けます。

Sub 関数を抜ける

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


Sub Tips(ByVal i As Integer)
    If i = 0 Then
        Exit Sub ' ここで関数を抜ける
    End If
    
    Debug.Print(i) ' i が 0 のとき、この処理は行われない
End Sub

引数が不正な値のときや、処理を続行できなくなったときに使用します。

Function 関数を抜ける

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


Function Found(ByVal i As Integer) As Boolean
    If i = 0 Then
        Found = False ' 不正なときの戻り値
        Exit Function ' ここで関数を抜ける
    End If
    
    Debug.Print(i) ' i が 0 のとき、この処理は行われない
    Found = True    ' 正常なときの戻り値
End Function

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

引数が不正な値のときや、処理を続行できなくなったときに使用します。

Do 文を抜ける

Exit Doのように入力します。ループの途中で Do 文を抜けられます。


Dim i As Integer
       
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 文」を終了条件にできます。While や Untile と違って処理の途中で終了できます。


Dim i As Integer
       
Do 
    i = i + 1
    
    If i = 3 Then ' i が 3 になったら
        Exit Do   ' Do を抜ける
    End If

    Debug.Print(i) ' 1 2
Loop
' Exit Do の後はここから処理が行われる

For 文を抜ける

Exit Forのように入力します。ループの途中で For 文を抜けられます。


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 の種類
    • Sub 関数を抜ける
    • Function 関数を抜ける
    • Do 文を抜ける
    • For 文を抜ける