VBAでマクロを書いていると、「ここで処理をやめたい」と思うことがあります。
たとえば、目的のデータが見つかった瞬間に検索ループを止めたいときや、エラーが発生したらそれ以上処理を続けたくないときなどです。
そんなときに使えるのが、「脱出構文」と呼ばれる Exit For や Exit Sub などの命令です。
今回はそれぞれの使い方と使いどころを、具体例つきでわかりやすく解説していきます。
「Exit For」でループを途中で抜ける
Exit For は、For〜Next のループの途中で処理を打ち切るときに使います。
例:A列に「完了」と書かれたセルを見つけたら、そこで終了
Sub SearchDone()
Dim i As Long
For i = 2 To 100
If Cells(i, 1).Value = "完了" Then
MsgBox "完了データを見つけました:" & i & "行目"
Exit For
End If
Next i
End Sub
このコードでは、A列を上から順に調べ、「完了」という文字が見つかった時点で Exit For によってループを抜けます。
これにより、無駄に最後まで回さずに済み、処理時間も短縮できます。
「Exit Sub」でマクロ全体を途中終了
Exit Sub は、マクロ全体(Subプロシージャ)を途中で終わらせたいときに使います。
例:入力が空白なら処理を中止
Sub ShowMessage()
Dim msg As String
msg = Range("A1").Value
If msg = "" Then
MsgBox "メッセージが空白のため中止します"
Exit Sub
End If
MsgBox "入力されたメッセージ:" & msg
End Sub
このコードでは、A1セルに何も入力されていなかったら、警告を出してそこで処理を止めます。
Exit Sub を使うことで、その後の処理が一切実行されずに安全に終了できます。
応用:Exit Do や Exit Function も同じ考え方
他にも、以下のような脱出構文があります。
| 構文 | 脱出対象 | よく使う場面 |
|---|---|---|
Exit For | For〜Next | 検索処理や条件一致で止めたいとき |
Exit Do | Do〜Loop | 条件ループから脱出したいとき |
Exit Sub | Subプロシージャ | 異常時やキャンセル時に処理を打ち切る |
Exit Function | Function | 計算処理などで早めに値を返したいとき |
基本的にはすべて、「今の処理の流れを止めるための脱出口」として使うことができます。
脱出構文を使うメリット
「Exit」系の構文を使うことには、実務上の次のようなメリットがあります。
1. 無駄な処理を避けられる
たとえば10,000件のデータを検索しているのに、1件目で見つかったあとも延々と処理を続けるのは非効率です。
Exit For を使えば、処理時間の削減につながります。
2. 安全に処理を止められる
入力チェックやエラー検知に Exit Sub を使えば、余計なエラーや処理ミスを未然に防げます。
3. コードの見通しがよくなる
「ここで終わりたい」という意図がコードに明確に書かれているため、読み手にとっても理解しやすくなります。
まとめ:早めの脱出がスマートな処理のコツ
最後に、要点をまとめます。
Exit Forはループを途中でやめたいときに使うExit Subはマクロ全体を早く終わらせたいときに使う- 他にも
Exit DoやExit Functionなど、処理単位で「途中脱出」が可能 - 無駄な処理を省き、保守性と効率を高められる
VBAでは、最後まで全部処理しようとするよりも、必要なときだけ最小限で終わるコードの方がスマートです。
「もう処理しなくていい」と思ったら、迷わず Exit を使って、スッキリしたマクロを書いてみましょう。
