エラー内容
VBAコンパイル時に、「For…Next 内に対応する Exit For がありません。」と表示される。
原因と解決方法
おもに次の2つの原因と解決方法が考えられます。
原因1. For文の外にExit Forがある
解説
Exit Forは、For文の繰り返し処理から、途中で抜ける命令です。
なので、次のプログラムのようにFor文の外にExit Forを書いていると、コンピュータは「どこから抜ければいいの?」となってしまい、エラーとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub ErrSample11_01() Dim i As Long Dim Goukei As Long '合計を計算する変数を初期化 Goukei = 0 For i = 1 To 5 'セルの合計を計算 Goukei = Goukei + Cells(i, 1).Value Next If Goukei = 0 Then '合計が0の時は、処理を途中で抜ける Exit For '← For文の外にExit For End If End Sub |
解決方法
今回の例は、For文の外側にExit Forがあるのがダメです。サブルーチン(sub)から抜けたいので、Exit Subに修正します。
サブルーチン(sub)ではなく、ファンクション(Function)から抜ける場合は、Exit Functionになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub ErrSample11_01() Dim i As Long Dim Goukei As Long '合計を計算する変数を初期化 Goukei = 0 For i = 1 To 5 'セルの合計を計算 Goukei = Goukei + Cells(i, 1).Value Next If Goukei = 0 Then '合計が0の時は、処理を途中で抜ける Exit Sub '← Exit Sub に修正 End If End Sub |
POINT
Forから抜ける時、Exit For
Subから抜ける時、Exit Sub
Functionから抜ける時、Exit Function
Forから抜ける時、Exit For
Subから抜ける時、Exit Sub
Functionから抜ける時、Exit Function
原因2. 他の繰り返し処理でExit Forを使っている
解説
Do Untilなど他の繰り返し処理で、Exit Forを使っている場合にエラーが発生します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub ErrSample11_02() Dim i As Long 'セルを調べるスタート行をセット i = 1 Do Until i = 10 If Cells(i, 1).Value = "" Then '空白行があったら処理を抜ける Exit For '← Do UntilなのにExit For End If i = i + 1 Loop End Sub |
解決方法
対応する命令に変更します。
今回はDo Untilなので、途中で処理を抜ける場合はExit Doを使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub ErrSample11_02() Dim i As Long 'セルを調べるスタート行をセット i = 1 Do Until i = 10 If Cells(i, 1).Value = "" Then '空白行があったら処理を抜ける Exit Do '← Exit Doに修正 End If i = i + 1 Loop End Sub |
POINT
「Exit ○○」の○○部分は、途中で抜ける処理を表しています。何の処理から抜けるのか、一度確認してみてください。
「Exit ○○」の○○部分は、途中で抜ける処理を表しています。何の処理から抜けるのか、一度確認してみてください。