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 Sub
や Exit 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 を超えたら繰り返し処理と途中で終了します。
ワークシートに次のように値を入力しました。
それではプログラムを実行します。
イミディエイトウィンドウには次のように表示されました。 4 行目のセル B4code> セルの値を加算したところで 200 を超えたため繰り返し処理を途中で終了しています。
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 回分乱数を取得して終了します。
それではプログラムを実行します。
イミディエイトウィンドウには次のように表示されました。今回は 5 回目の乱数取得で 7 が出たため繰り返し処理は途中で終了となりました。
もう一度実行すると、今度は途中で 7 が出なかったため 8 回分乱数を取得して終了しました。
-- --
Excel VBA で Exit 文を使って繰り返し処理を途中で終了する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。