Categories: VBA基礎

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 )の使い方

※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

 

●実行前~実行後 ※プログラム実行後、入力した予算額に応じて購入できる商品に対して【購入予定】に【買える】と表示されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA Exit For・Exit Doの使い方(空白行でループ処理から抜ける)

 

 

●プログラム説明 (サンプルプログラム②)
下記のサンプルプログラムは、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

 

●実行前~実行後 ※プログラム実行後、品名のリストデータ3行目から空白行(18行)の一つ上まで価格を集計して結果を合計額(E3)に記入しました。
(画面クリックして拡大)

 

 

 

EXCEL VBA Exit For・Exit Doの使い方(検索・一致でループ処理から抜ける)

 

 

●プログラム説明 (サンプルプログラム③)

下記のサンプルプログラムは、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キー】を同時に押すことで強制的にプログラム(無限ループ)を中断させる事が出来ます。

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA