Exit文は「ここでいったん打ち切るための非常口」
Exit文は、
「本来の終わり方を待たずに、ここで処理を打ち切りたい」
ときに使う“非常口”のような命令です。
ループなら「本当は10回回す予定だけど、条件を満たしたからもう十分。ここで抜けたい」。
プロシージャなら「これ以上続ける意味がないから、ここで終わりにしたい」。
そういう“途中終了”を、意図的に・安全に行うための仕組みが Exit文です。
VBAには主に次の種類があります。
- Exit For
- Exit Do
- Exit Sub / Exit Function / Exit Property
それぞれ、「どこから抜けるか」が違います。
Exit For:Forループを途中で抜ける非常口
基本イメージ
For文は本来、「開始値から終了値まで」きっちり回ります。
でも、ループの途中で「もう目的を達成したから、これ以上回さなくていい」となることがあります。
そのときに使うのが Exit For です。
For i = 1 To 100
' 何かの処理
If ある条件 Then
Exit For ' Forループをここで抜ける
End If
Next i
VBExit For が実行された瞬間、その Forループを即座に抜けて、
Next の次の行に処理が移ります。
具体例:最初に「完了」と書かれている行だけ見つけたい
Sub SampleExitFor()
Dim i As Long
For i = 1 To 100
If Range("A" & i).Value = "完了" Then
MsgBox "最初の完了は " & i & " 行目です"
Exit For
End If
Next i
End Sub
VBこのコードは、
- A1 から A100 まで順番に見ていき
- 最初に「完了」と書かれている行を見つけたら
- その時点でメッセージを出し、Exit For でループを抜ける
という動きをします。
重要なのは、「最初の一件だけでいい」からこそ Exit For が意味を持つ、という点です。
Exit For がないと、「見つけたあとも最後まで無駄に回り続ける」ことになります。
Exit Do:Doループを途中で抜ける非常口
基本イメージ
Do While / Do Until も、本来は「条件が変わるまで」回り続けます。
でも、ループの中で「もうこれ以上続ける必要がない」と判断できることがあります。
そのときに使うのが Exit Do です。
Do While 条件式
' 何かの処理
If ある条件 Then
Exit Do ' Doループをここで抜ける
End If
Loop
VBExit Do が実行された瞬間、その Doループを抜けて、
Loop の次の行に処理が移ります。
具体例:エラーっぽい値を見つけたら、そこで調査を打ち切る
Sub SampleExitDo()
Dim r As Long
r = 1
Do While Range("A" & r).Value <> ""
If Not IsNumeric(Range("A" & r).Value) Then
MsgBox "数値以外の値を " & r & " 行目で発見。処理を中断します。"
Exit Do
End If
r = r + 1
Loop
End Sub
VBこのコードは、
- A列を上から順に見ていき
- 空白になるまではループを続けるが
- 数値以外の値を見つけた瞬間にメッセージを出し、Exit Do でループを抜ける
という動きをします。
「異常を見つけたら、そこで処理を止めたい」
という場面で、Exit Do はとても自然に使えます。
Exit Sub / Exit Function:プロシージャ自体を途中で終わらせる
Exit Sub の基本イメージ
Subプロシージャの途中で、
「これ以上続ける意味がない」「前提条件を満たしていないから中断したい」
というときに使うのが Exit Sub です。
Sub SampleExitSub()
If Range("A1").Value = "" Then
MsgBox "A1 が空なので処理を中止します。"
Exit Sub ' ここでこのSubを終了
End If
' ここから下は、A1 が空でない場合だけ実行される処理
MsgBox "A1 には値が入っています。処理を続行します。"
End Sub
VBExit Sub が実行された瞬間、その Sub の処理はそこで終了し、
呼び出し元(実行した側)に戻ります。
「前提条件チェック → ダメなら即終了」は、実務で非常によく使うパターンです。
Exit Function の基本イメージ
Functionプロシージャでも同様に、
途中で処理を打ち切りたいときに Exit Function を使います。
Function SafeDivide(ByVal a As Double, ByVal b As Double) As Variant
If b = 0 Then
SafeDivide = CVErr(xlErrDiv0) ' 0除算エラーを返す
Exit Function ' ここで関数を終了
End If
SafeDivide = a / b
End Function
VBこの関数は、
- b が 0 のときは、計算せずにエラー値を返して終了
- それ以外のときは、普通に a / b を返す
という動きをします。
Exit Function のポイントは、
「戻り値をセットしてから Exit Function する」 という流れです。
戻り値をセットしないまま Exit Function すると、意図しない値が返ることがあります。
Exit文の「使いどころ」と「やりすぎ注意」のバランス
Exit文が“きれいにハマる”場面
Exit For / Exit Do / Exit Sub / Exit Function は、
次のような場面で特に有効です。
- 「最初の一件だけ見つければいい」検索処理
- 「異常を見つけたら、そこで処理を止めたい」チェック処理
- 「前提条件を満たしていないなら、これ以上進めない」ガード処理
こういうときに Exit文を使うと、
「目的を達成した瞬間に、無駄な処理をせずに抜ける」
という、効率の良いコードになります。
ただし、Exitだらけにすると読みづらくなる
一方で、あちこちに Exit文が散らばっていると、
「この処理はどこで終わる可能性があるのか」が追いづらくなります。
特に、
- ネストの深いループの中で、あちこちに Exit For / Exit Do
- 長い Sub の中で、何箇所も Exit Sub
などを乱発すると、
「頭の中で処理の流れを追う」のが一気に難しくなります。
目安としては、
- ループにつき Exit For / Exit Do は“1~2箇所まで”に抑える
- Sub / Function の Exit は「前提条件チェック」など、意味がはっきりした場所に絞る
くらいの感覚で使うと、コードの見通しが良くなります。
まとめ:Exit文は「意図的な途中終了」を表現するための道具
Exit文の本質は、
「本来の終わり方を待たずに、ここで処理を打ち切る」
という意図を、コードとしてはっきり書くことです。
押さえておきたいポイントをコンパクトにまとめると、
- Exit For:今の Forループを即座に抜ける
- Exit Do:今の Doループを即座に抜ける
- Exit Sub / Exit Function:そのプロシージャ自体を途中で終了する
- 「最初の一件だけでいい」「異常を見つけたら中断」「前提条件を満たさないなら即終了」などに向いている
- 便利だからこそ、乱用すると“どこで終わるか分かりにくいコード”になるので、使う場所は絞る

