Excel VBAでFor文を途中で抜ける:Exit

VBAで繰り返し文の処理を途中で抜けるには、Exitステートメントを使用します。以下では、使い方と使用例をご紹介します。

Exitステートメント

for…NextステートメントやDo...Loopステートメントで、繰返し処理を途中で抜ける際に使用します。

For文の場合は「 Exit for」、Do文の場合は「Exit Do」といった具合で

構文:Exit (ステートメント名)

で記述します。通常、If...ThenやSelect Caseステートメントを併用し、ある条件を満たしたらループを抜ける、という使い方をします。

使用例

ここでは、Exit Forのみ説明します。下記例は、A列の値の中に「値0のセル」が見つかるとループを抜けます。セルA5の値が0ですが、実際に抜けるかどうか脱出時の変数iを出力して確認してみます。

(データの状態)Exit1(コード)

Sub ExitSample1()
'値が0のセルが見つかるとループ終了
Dim i As Long

For i = 1 To 7
    If Cells(i, 1).Value = 0 Then
        Exit For
    End If
Next i

Debug.Print "i=" & i 'ループ脱出時のカウンタ変数iを出力

End Sub

[実行結果] Exit2

For文の中にExit Forを組み込みます。i=5で出力されたのでループを脱出できています。

使用例2

下記例は、列Aと列Bの各値を総当たりで加算し、合計が500になる組合せが存在すれば「True」、無ければ「False」を返すものです。セルA2とB4の合計が500ですので、今回は「True」となるはずです。

Exit5

これを調べるためのコードは一見、下記でよさそうですが、Exitがないのでうまくいきません。

'Exitなし
Dim i As Long, j As Long
Dim Sum500 As Boolean

For i = 1 To 5
    For j = 1 To 5
        If Cells(i, 1).Value + Cells(j, 2).Value = 500 Then
            Sum500 = True
        Else
            Sum500 = False
        End If
    Next j
Next i

MsgBox Sum500

[実行結果]Exit4

i=2、j=4の時に、変数Sum500は一時的に「True」となっていたのですが、そのままループを続行してしまったため、最後のi=5、j=5での結果が出てしまいました。正しい結果を得るためには、合計が500になる組み合わせが見つかった時点で、すぐにループを抜ける必要があります。下記に、Exitを入れたコードを示します。内側「j」のループを抜けたら、外側「i」のループもすぐ抜けるようコード内(2)の記述も忘れないようにします。

Sub ExitSample3()

Dim i As Long, j As Long
Dim Sum500 As Boolean
'Exitあり
For i = 1 To 5
    For j = 1 To 5
        If Cells(i, 1).Value + Cells(j, 2).Value = 500 Then
            Stop
            Sum500 = True
            Exit For    '合計500の組み合わせが見つかったら内ループ(j)を抜ける(1)
        Else
            Sum500 = False
        End If
    Next j
    If Sum500 = True Then   'Sum500がTrueの時は外ループ(i)も抜ける(2)
        Exit For
    End If
Next i

MsgBox Sum500

End Sub

[実行結果]Exit6

Exitを用いたら、無事500になる組み合わせがあると判断されました。


イベント