EXCEL VBA ループ処理からの抜け出し(Exit For / Exit Do)
EXCEL VBA ループ処理からの抜け出し(Exit For / Exit Do)
●はじめに
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 )の使い方
EXCEL VBA Exit For・Exit Doの使い方(ループ処理から抜ける)
●プログラム説明 (サンプルプログラム①)
下記のサンプルプログラムは、Exit Forを利用したサンプルプログラムになります。サンプルプログラムの説明ですが、下表には、購入したいリストが上位からランキング順で品名が入力されています。このランキング順で予算額内で購入できる品名については、F列【購入予定】に【買える】がD列セルに表示されます。
※下記のサンプルプログラムは、For Next で作成した場合とDo While Loopで作成した場合と、2種類のサンプルプログラムを作成しております。なお、処理結果については、どちらも同じ処理内容・結果になります。
※下記のサンプルプログラムは、For Next で作成した場合とDo While Loopで作成した場合と、2種類のサンプルプログラムを作成しております。なお、処理結果については、どちらも同じ処理内容・結果になります。
【For NextでExit Forを利用した場合】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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を利用した場合】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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 |
●実行前~実行後 ※プログラム実行後、入力した予算額に応じて購入できる商品に対して【購入予定】に【買える】と表示されました。
(画面クリックして拡大)
EXCEL VBA Exit For・Exit Doの使い方(空白行でループ処理から抜ける)
●プログラム説明 (サンプルプログラム②)
下記のサンプルプログラムは、For Next のループ処理から途中で抜け出すサンプルプログラムです。下表に、品名のリストがあります。リストデータは、全体を見ると22行(最終行)までデータは登録されていますが、18行目に空白行があります。データとしては、ここで区切りをつけていますので、ここまでの間の価格合計を「合計額」に表示させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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 |
●実行前~実行後 ※プログラム実行後、品名のリストデータ3行目から空白行(18行)の一つ上まで価格を集計して結果を合計額(E3)に記入しました。
(画面クリックして拡大)
(画面クリックして拡大)
EXCEL VBA Exit For・Exit Doの使い方(検索・一致でループ処理から抜ける)
●プログラム説明 (サンプルプログラム③)
下記のサンプルプログラムは、Do While Loop のループ処理から途中で抜け出すサンプルプログラムです。プログラム実行後、品名を入力して品名リストを検索して入力した品名とリストの品名が一致した時に、該当した価格をメッセージボックスで表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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キー】を同時に押すことで強制的にプログラム(無限ループ)を中断させる事が出来ます。
ただし、無限ループに陥った場合に【ESCキー】を押すか【CTRLキー】+【Breakキー】を同時に押すことで強制的にプログラム(無限ループ)を中断させる事が出来ます。
最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。