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を出力して確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 |
For文の中にExit Forを組み込みます。i=5で出力されたのでループを脱出できています。
使用例2
下記例は、列Aと列Bの各値を総当たりで加算し、合計が500になる組合せが存在すれば「True」、無ければ「False」を返すものです。セルA2とB4の合計が500ですので、今回は「True」となるはずです。
これを調べるためのコードは一見、下記でよさそうですが、Exitがないのでうまくいきません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
'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 |
i=2、j=4の時に、変数Sum500は一時的に「True」となっていたのですが、そのままループを続行してしまったため、最後のi=5、j=5での結果が出てしまいました。正しい結果を得るためには、合計が500になる組み合わせが見つかった時点で、すぐにループを抜ける必要があります。下記に、Exitを入れたコードを示します。内側「j」のループを抜けたら、外側「i」のループもすぐ抜けるようコード内(2)の記述も忘れないようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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 |
Exitを用いたら、無事500になる組み合わせがあると判断されました。