Exit文を使って繰り返し処理を途中で終了する

Do Loop 文や For Next 文を使うことで VBA で繰り返し処理を行うことができますが、繰り返し処理が終了する条件を満たして終了する前に Exit 文を実行することで繰り返し処理を途中で終了することができます。ここでは Excel VBA で Exit 文を使って繰り返し処理を途中で終了する方法について解説します。

(Last modified: )

Exit文の種類

VBA では Exit 文としていくつかの種類が用意されており、利用する状況にあわせて使い分けます。

Exit Do
Exit For
Exit Function
Exit Property
Exit Sub

Do Loop 文を途中で終了する場合は Exit Do を使用します。また For Next 文を途中で終了する場合は Exit For を使用します。

※ プロシージャを途中で終了する Exit SubExit Function については別のページで解説します。

Exit Doの使い方

Do Loop 文を途中で終了するには Exit Do を使用します。例として Do While ... Loop で試してみます。

Do While 条件式
    条件式がTrueのときに行う処理
Loop

繰り返し処理の中で Exit Do を実行すると、すぐに繰り返し処理の次の処理へ移ります。例えば If 文を使って何か特別な条件を満たしたときに繰り返し処理を終了したい場合は次のように記述します。

Do While 条件式1
    条件式1がTrueのときに行う処理

    If 条件式2 Then
        Exit Do
    End If
Loop

次の処理

Exit Do が実行されると Do While ... Loop を抜けて「次の処理」が実行されます。

また Do While ... Loop をネストして記述している場合、内側の繰り返し処理で Exit Do を実行すると内側の繰り返し処理だけを終了します。例えば下記で Exit Do が実行されると内側の繰り返し処理を抜けて「条件式1がTrueのときに行う処理(2)」へ処理が移ります。

Do While 条件式1
    条件式1がTrueのときに行う処理(1)

    Do While 条件式2
        条件式2がTrueのときに行う処理

        If 条件式3 Then
            Exit Do
        End If
    Loop

    条件式1がTrueのときに行う処理(2)
Loop

次の処理

このように Exit Do を使用すると Do Loop 文を途中で終了することができます。なお Exit Do を使用しなくてもプログラムの記述の仕方によって同じことが実現できる場合がほとんどですが、 Exit Do を使用した方がすっきり記述できる場合がありますので使用方法として覚えておかれてください。

サンプルコード

それでは簡単なサンプルを作成して試してみます。

Option Explicit

Sub テスト()
    Dim rowno As Integer
    Dim sum As Integer
    
    rowno = 2
    sum = 0

    Do While Cells(rowno, 1).Value <> ""
        sum = sum + Cells(rowno, 2).Value
        If sum > 200 Then
            Exit Do
        End If
        rowno = rowno + 1
    Loop

    Debug.Print ("合計 = " & sum)
    Debug.Print ("行数 = " & rowno)
End Sub

今回のサンプルではセル B2 から順番に下へ向かってセルの値を取得し合計していきます。セルの値が空欄になるまで繰り返し処理を続けますが、合計が 200 を超えたら繰り返し処理と途中で終了します。

ワークシートに次のように値を入力しました。

Exit Doの使い方(1)

それではプログラムを実行します。

Exit Doの使い方(2)

イミディエイトウィンドウには次のように表示されました。 4 行目のセル B4code> セルの値を加算したところで 200 を超えたため繰り返し処理を途中で終了しています。

Exit Doの使い方(3)

Exit Forの使い方

For Next 文を途中で終了するには Exit For を使用します。例として For ... Next で試してみます。

For 変数 = 初期値 To 最終値
    実行する処理
Next 変数

繰り返し処理の中で Exit For を実行すると、すぐに繰り返し処理の次の処理へ移ります。例えば If 文を使って何か特別な条件を満たしたときに繰り返し処理を終了したい場合は次のように記述します。

For 変数 = 初期値 To 最終値
    実行する処理

    If 条件式 Then
        Exit For
    End If
Next 変数

次の処理

Exit For が実行されると For .. Next を抜けて「次の処理」が実行されます。

また For .. Next をネストして記述している場合、内側の繰り返し処理で Exit For を実行すると内側の繰り返し処理だけを終了します。例えば下記で Exit For が実行されると内側の繰り返し処理を抜けて「実行する処理(2)」へ処理が移ります。

For 変数1 = 初期値1 To 最終値1
    実行する処理(1)

    For 変数2 = 初期値2 To 最終値2
        実行する処理
        If 条件式 Then
            Exit For
        End If
    Next 変数2

    実行する処理(2)
Next 変数1

次の処理

このように Exit For を使用すると For Next 文を途中で終了することができます。

サンプルコード

それでは簡単なサンプルを作成して試してみます。

Option Explicit

Sub テスト()
    Dim num As Integer
    Dim i As Integer
    
    Randomize
    
    For i = 1 To 8
        num = Int(10 * Rnd + 1)
        Debug.Print i & ", num = " & num
        
        If num = 7 Then
            Debug.Print ("当選")
            Exit For
        End If
    Next i
End Sub

今回のサンプルでは 1 から 10 までの数値が出る乱数を 8 回取得します。乱数で 7 が出た場合は「当選」となり、その時点で繰り返し処理を終了します。 7 が出なかった場合はあらかじめ決められた 8 回分乱数を取得して終了します。

それではプログラムを実行します。

Exit Forの使い方(1)

イミディエイトウィンドウには次のように表示されました。今回は 5 回目の乱数取得で 7 が出たため繰り返し処理は途中で終了となりました。

Exit Forの使い方(2)

もう一度実行すると、今度は途中で 7 が出なかったため 8 回分乱数を取得して終了しました。

Exit Forの使い方(3)

-- --

Excel VBA で Exit 文を使って繰り返し処理を途中で終了する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。