Exit Do や Exit Forでループ処理を中断する
EXCEL VBAの基本コードを紹介しています。初心者の方が順番に読んでくだけでVBAの基礎コードが理解出来るようになればなと思って、短めの記事で進めて行きたいと思います!
今回は、”Exit Do や Exit Forでループ処理を中断したり飛ばしたりする処理”について紹介します!
“Exit Do” や “Exit For”での処理の中断・終了
これまでに、”Do Loop””for文”を使った繰り返し処理について紹介させて頂きました。
いずれも指定した条件の間、同じような処理を繰り返すことができました。
しかし、プログラムを作っていると繰り返し処理の途中で、もうそれ以降繰り返したくない時が発生します。
例えば、EXCELシートで言うと以下のような時です。
A1セルから、A10 セルに「果物の名前」が入っているとして、
A1セルから文字列の内容を順番にチェックしていって、”りんご”が初めて出てきた行番号を取得したいとします。
この場合、for文を使ってA1セルから順番にチェックをしていく処理になると思いますが、一番最初に見つかったものが分かればそれ以降は繰り返す必要は有りませんよね。
例では、A10セルまでですが、終わりがA100000セルとかだったりすると、始めの方で”りんご”が見つかったとすると、後の処理は無駄ですね。
プログラムの処理スピードにも影響してきます。
“Exit For” “Exit Do”
“Exit For” “Exit Do”を使うことでループ処理の途中での中断をすることが出来ます。両者の違いは、繰り返し処理が”For文”なのか、”Do Loop文”なのかです。”For文”なら、”Exit For”、”Do Loop文”なら、”Exit Do”を使います。
これを使って。先程の”りんご”を見つけて行番号を表示する実際のプログラムが次です。
Sub test()
' EXCELシートを取得する
Dim sheet As Worksheet
Set sheet = ThisWorkbook.ActiveSheet
' A1セルからA10セルまで順番にチェック
Dim i As Long
For i = 1 To 10
' チェックするセルの値が”りんご”だったら、メッセージボックスで表示
Dim checkRng As Range
Set checkRng = sheet.Cells(i, 1)
' 格納されたものをメッセージで表示
MsgBox "「" & checkRng.Value & "」が格納されました。"
If checkRng.Value = "りんご" Then
MsgBox "りんごは " & checkRng.Row & "行目です。"
Exit For 'ループ処理の終了
End If
Next
MsgBox "処理終了"
End Sub
for文で、A1セルから順番に、「変数:checkRng」に格納されていきます。格納後に、メッセージボックスで格納されたセルの値を表示します。そしてcheckRngの値が”りんご”かどうかを、if文でチェックして、if文がTrueのときは、メッセージボックスで「りんごは○行目です」と”りんご”のある行数を表示し、処理を終了します。
「Exit For」はコードの20行目で出てきますね。※繰り返し処理は、”For文”を使っているので”Exit For”を使っています。
りんごが見つかった段階で、メッセージボックスにメッセージを表示して、その後「Exit For」を通るのでループの処理が終了します。
それでは、動画で動きを確認します。
りんごが見つかったあとのループ処理が行われず、処理終了のメッセージが出ましたね。
比較して分かりやすいように、”Exit For”なしの場合、どのような動きになるかも動画で確認しましょう。※20行目の”Exit For”をコメントアウトします。
Sub test()
' EXCELシートを取得する
Dim sheet As Worksheet
Set sheet = ThisWorkbook.ActiveSheet
' A1セルからA10セルまで順番にチェック
Dim i As Long
For i = 1 To 10
' チェックするセルの値が”りんご”だったら、メッセージボックスで表示
Dim checkRng As Range
Set checkRng = sheet.Cells(i, 1)
' 格納されたものをメッセージで表示
MsgBox "「" & checkRng.Value & "」が格納されました。"
If checkRng.Value = "りんご" Then
MsgBox "りんごは " & checkRng.Row & "行目です。"
'Exit For 'ループ処理の終了 →コメントアウトする
End If
Next
MsgBox "処理終了"
End Sub
コード20行目”Exit For”をコメントアウトすると、”りんご”が見つかったあとも、ループ処理が続けられていることが分かります。
処理の流れをイメージ図にしました。
まとめ
“Exit For” “Exit Do”について説明しました。
コメント