Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 - Exit文

Excel VBA VBA
スポンサーリンク

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
VB

Exit 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
VB

Exit 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
VB

Exit 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:そのプロシージャ自体を途中で終了する
  • 「最初の一件だけでいい」「異常を見つけたら中断」「前提条件を満たさないなら即終了」などに向いている
  • 便利だからこそ、乱用すると“どこで終わるか分かりにくいコード”になるので、使う場所は絞る

タイトルとURLをコピーしました