VBAで条件によってループを途中で終了する(Exit For)

VBAの For Nextループ は、通常 指定回数すべての繰り返しを実行 しますが、
Exit For を使うことで 特定の条件を満たした時点でループを抜ける ことができます。

本記事では Exit For の基本構文と実用例を解説します。


1. Exit Forの基本構文

For 変数 = 開始値 To 終了値
    If 条件 Then Exit For
    'ループ内の処理
Next 変数

ポイント:

  • If 条件 Then Exit For を記述することで 条件を満たした時点でループ終了
  • その後の繰り返しは 実行されない

2. Exit Forの基本的な使い方

(1) 指定の値になったらループを終了

例えば、1~10の数字をループし、5になったら終了する場合:

Dim i As Integer
For i = 1 To 10
    If i = 5 Then Exit For  '5になったらループ終了
    Debug.Print "現在の値:" & i
Next i

出力結果:

現在の値:1  
現在の値:2  
現在の値:3  
現在の値:4  
(5を出力するで終了)  

ポイント:

  • i = 5 になった時点で Exit For によりループ終了
  • 6~10 の処理は実行されない

3. Exit Forの活用例

(1) 特定の値を見つけたらループを終了

配列の中から 特定の値を探し、見つかったらループを抜ける 場合

Dim i As Integer, target As Integer
Dim numbers() As Integer
numbers = Array(10, 20, 30, 40, 50)

target = 30  '探す値

For i = LBound(numbers) To UBound(numbers)
    If numbers(i) = target Then
        Debug.Print "値 " & target & " を発見! インデックス: " & i
        Exit For  '見つかったらループ終了
    End If
Next i

出力結果:

値 30 を発見! インデックス: 2

ポイント:

  • 配列を検索し 30を見つけた時点でループを抜ける
  • 無駄な処理を減らせるので効率的

(2) エラー回避:異常値を検出したらループを終了

例えば、リストの中に 負の数が出たら処理を中断 する:

Dim i As Integer, numbers() As Integer
numbers = Array(5, 8, 12, -3, 15) '-3が異常値

For i = LBound(numbers) To UBound(numbers)
    If numbers(i) < 0 Then
        Debug.Print "異常値 " & numbers(i) & " を検出! 処理を中断"
        Exit For
    End If
    Debug.Print "処理中:" & numbers(i)
Next i

出力結果:

処理中:5  
処理中:8  
処理中:12  
異常値 -3 を検出! 処理を中断  

ポイント:

  • 負の数(異常値)を発見したら即終了
  • エラーが発生しそうな処理を 安全に回避 できる

(3) ユーザー入力によるループの終了

ユーザーに 途中で処理を中断する選択肢を与える ことも可能

Dim i As Integer, answer As String
For i = 1 To 10
    answer = InputBox("処理を続けますか?(yes/no)")
    If LCase(answer) = "no" Then
        Debug.Print "ユーザーが処理を終了しました"
        Exit For
    End If
    Debug.Print "処理中:" & i
Next i

ポイント:

  • InputBox でユーザーの入力を取得
  • “no” が入力されたら Exit For で処理を停止

4. Exit Forの注意点

(1) Exit Forを使いすぎない

  • Exit For は便利ですが、使いすぎるとコードが読みにくくなる
  • 条件を整理し、できるだけ通常のループの流れで書くことを意識する

(2) 多重ループの中でのExit For

Exit For現在のループだけを抜ける

For i = 1 To 3
    For j = 1 To 3
        If j = 2 Then Exit For '内側のループのみ抜ける
        Debug.Print "i:" & i & " j:" & j
    Next j
Next i

出力結果:

i:1 j:1  
i:2 j:1  
i:3 j:1  

ポイント:

  • Exit For内側のループのみ終了 する
  • 外側のループは継続

5. まとめ

用途方法
特定の値でループを終了If 条件 Then Exit For
配列の検索を最適化目的の値が見つかったら Exit For
エラー回避異常値を検出したら Exit For
ユーザーの操作で終了InputBox を使用し Exit For
多重ループでの注意点Exit For1つのループのみ 抜ける

「Exit For」を活用すると無駄な処理を省いて効率的なコードを書くことができます!

コメント

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