EXCEL VBAでのループ処理は、「For Next ・Do While Loop・Do Until Loop・Do Loop While」など、複数ありますが、ループ処理はある特定な回数や条件が一致した時にループから抜けるのが一般的ですが、ここで紹介する「Exit ForとExit Do」を利用する事で、ループ途中でもループから抜ける事ができます。また、無限ループするかも知れない処理を実行する時などにも処理から抜け出せるように、Exit For/Exit Doを利用する事も出来ます。それでは、順番に説明をいたします。
●書式の説明 ( Exit For/ Exit For )の使い方
※Exitステートメントは、ループの途中から抜け出す事ができる便利な機能です。ループ条件と別にIF文などを使い別条件を使ってループから抜け出す事ができます。 Exit For/ Exit For
EXCEL VBA Exit For・Exit Doの使い方(ループ処理から抜ける)
●プログラム説明 (サンプルプログラム①)
下記のサンプルプログラムは、Exit Forを利用したサンプルプログラムになります。サンプルプログラムの説明ですが、下表には、購入したいリストが上位からランキング順で品名が入力されています。このランキング順で予算額内で購入できる品名については、F列【購入予定】に【買える】がD列セルに表示されます。 ※下記のサンプルプログラムは、For Next で作成した場合とDo While Loopで作成した場合と、2種類のサンプルプログラムを作成しております。なお、処理結果については、どちらも同じ処理内容・結果になります。
【For NextでExit Forを利用した場合】
Sub for_next_Exit01()
Dim I, lRow, Gokei As Long
lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得
Range("D3:D" & lRow).ClearContents 'D3~D列最終行まで文字列消去
Gokei = 0 '合計値を0
For I = 3 To lRow '3列目からA列の最終行(12)まで繰り返します。
Gokei = Gokei + Cells(I, "C") 'GokeiにC列の価格を加算します。
If Gokei >= Range("F3") Then
Exit For '合計金額(Gokei)が予定額以上になったらFor Nextから抜け出します。
End If
Range("D" & I) = "買える" '予算額を下回っている物については、D列に「買える」を記入
Next I
End Sub
【Do While LoopでExit Doを利用した場合】
Sub Do_While_Loop_Exit01()
Dim I, lRow, Gokei As Long
lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得
Range("D3:D" & lRow).ClearContents 'D3~D列最終行まで文字列消去
Gokei = 0 '合計値を0
I = 3 '開始行3行目から開始
Do While lRow > I '3列目からA列の最終行(12)まで繰り返します。
Gokei = Gokei + Cells(I, "C") 'GokeiにC列の価格を加算します。
If Gokei >= Range("F3") Then
Exit Do '合計金額(Gokei)が予定額以上になったらDo While Loopから抜け出します
End If
Range("D" & I) = "買える" '予算額を下回っている物については、D列に「買える」を記入
I = I + 1 '次の行に+1
Loop
End Sub
下記のサンプルプログラムは、For Next のループ処理から途中で抜け出すサンプルプログラムです。下表に、品名のリストがあります。リストデータは、全体を見ると22行(最終行)までデータは登録されていますが、18行目に空白行があります。データとしては、ここで区切りをつけていますので、ここまでの間の価格合計を「合計額」に表示させます。
Sub for_next_Exit02()
Dim I, lRow, Gokei As Long
lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得
Range("E3").ClearContents 'セル(E3)合計値の文字消去
Gokei = 0 '合計値を0
For I = 3 To lRow '3列目からA列の最終行(12)まで繰り返します。
Gokei = Gokei + Cells(I, "C") 'GokeiにC列の価格を加算します。
If Range("A" & I) = "" Then
Exit For 'A列が「空白」になったらFor Nextから抜け出します。
End If
Next I
Range("E3") = Gokei '合計値をセル(E3)に記入します。
End Sub
下記のサンプルプログラムは、Do While Loop のループ処理から途中で抜け出すサンプルプログラムです。プログラム実行後、品名を入力して品名リストを検索して入力した品名とリストの品名が一致した時に、該当した価格をメッセージボックスで表示します。
Sub Do_While_Loop_Exit03()
Dim I, lRow As Long
Dim Hinmei As String
Hinmei = InputBox("品名を入力してください")
lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得(12)
I = 3 '開始行3行目から開始
Do While lRow > I '3列目からA列の最終行(12)まで繰り返します。
If Range("B" & I) = Hinmei Then
MsgBox "入力した" & Hinmei & "の価格は" & Range("C" & I) '入力した品目が見つかった場合に、品名価格を表示します。
Exit Do '入力した品名が見つかった場合はDo While Loopから抜けます。
End If
I = I + 1 '次の行に+1
Loop
End Sub
VBAプログラムを作成して、ループ処理で特に「Do While Loop」や「Do Until Loop」などを利用する場合は、条件式や変数の加算などの処理を記入する事を忘れて実行した場合、無限ループが発生していまいます。無限ループが発生すると、応答無しやEXCELが固まってしまいます。 ただし、無限ループに陥った場合に【ESCキー】を押すか【CTRLキー】+【Breakキー】を同時に押すことで強制的にプログラム(無限ループ)を中断させる事が出来ます。