EXCEL VBAでのループ処理は、「For Next ・Do While Loop・Do Until Loop・Do Loop While」など、複数ありますが、ループ処理はある特定な回数や条件が一致した時にループから抜けるのが一般的ですが、ここで紹介する「Exit ForとExit Do」を利用する事で、ループ途中でもループから抜ける事ができます。また、無限ループするかも知れない処理を実行する時などにも処理から抜け出せるように、Exit For/Exit Doを利用する事も出来ます。それでは、順番に説明をいたします。
【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
●実行前~実行後 ※プログラム実行後、入力した予算額に応じて購入できる商品に対して【購入予定】に【買える】と表示されました。
(画面クリックして拡大)
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