この記事では、VBA(Visual Basic for Applications)で使用するFor文を途中で抜ける方法について、解説します。Exit Forステートメントの使い方、その具体例、そして実用的なサンプルコードを解説します。

Exitステートメントとは
基本的な使い方
VBAで繰り返し処理を途中で抜けるには、Exitステートメントが必要です。このステートメントは、For文であればExit For、Do文であればExit Doといった形で使用します。このステートメントは通常、If...ThenやSelect Caseステートメントと併用し、特定の条件を満たした場合にループを抜けるように設計されます。
構文
Exit [ステートメント名]
| 項目 | 説明 |
|---|---|
| ステートメント名 | 抜けたいループの種類(For、Doなど)を指定します。 |
サンプルコード集
使用例1:値が0のセルを見つけたらループを抜ける

サンプルコード
Sub ExitSample1()
Dim i As Long
For i = 1 To 7
If Cells(i, 1).Value = 0 Then
Exit For
End If
Next i
Debug.Print "i=" & i ' ループ脱出時のカウンタ変数iを出力
End Sub
処理の流れ
Dim i As Longで変数iをLong型として宣言します。For i = 1 To 7で、iが1から7までのループを開始します。If Cells(i, 1).Value = 0 Thenで、A列(列番号1)のi行目のセルが0かどうかを判定します。- もし0であれば、
Exit Forでループを抜けます。 - 最後に、
Debug.Print "i=" & iで、どの段階でループを抜けたかを出力します。
このコードは、特にExcelのA列に0が含まれているかどうかを調べる際に便利です。
使用例2:列Aと列Bの値を加算し、合計が500になるか調べる

サンプルコード
Sub ExitSample2()
Dim i As Long, j As Long
Dim Sum500 As Boolean
For i = 1 To 5
For j = 1 To 5
If Cells(i, 1).Value + Cells(j, 2).Value = 500 Then
Sum500 = True
Exit For ' 合計が500になったら内側のループを抜ける
Else
Sum500 = False
End If
Next j
If Sum500 = True Then ' 外側のループも抜ける
Exit For
End If
Next i
MsgBox Sum500
End Sub
処理の流れ
Dim i As Long, j As Longで、変数iとjをLong型として宣言します。Dim Sum500 As Booleanで、合計が500になったかどうかを格納するBoolean型の変数Sum500を宣言します。- 外側の
For i = 1 To 5ループと内側のFor j = 1 To 5ループを用いて、列Aと列Bの各セルの値を加算します。 If Cells(i, 1).Value + Cells(j, 2).Value = 500 Thenで、加算した値が500になるかを判定します。- もし500であれば、
Sum500 = Trueにして、Exit Forで内側のループを抜けます。 - 外側のループも、
If Sum500 = True Thenで抜けるようにしています。
このコードは、特定の条件下での計算を高速化する際に有用です。
使用例3:配列内の特定の値を見つけたらループを抜ける

サンプルコード
Sub ExitSample3()
Dim arr() As Variant
Dim i As Long
arr = Array(10, 20, 30, 40, 50)
For i = LBound(arr) To UBound(arr)
If arr(i) = 30 Then
Exit For
End If
Next i
Debug.Print "Found at index: " & i
End Sub
処理の流れ
Dim arr() As Variantで、Variant型の動的配列arrを宣言します。arr = Array(10, 20, 30, 40, 50)で、配列に値を代入します。For i = LBound(arr) To UBound(arr)で、配列の最小インデックスから最大インデックスまでループします。If arr(i) = 30 Thenで、配列内に30が存在するかを確認します。- 30が見つかれば、
Exit Forでループを抜けます。
このコードは、配列内に特定の値が存在するかどうかを高速に調べる際に便利です。
使用例4:文字列内で特定の文字を見つけたらループを抜ける

サンプルコード
Sub ExitSample4()
Dim str As String
Dim i As Long
str = "Hello, World!"
For i = 1 To Len(str)
If Mid(str, i, 1) = "," Then
Exit For
End If
Next i
Debug.Print "Comma found at position: " & i
End Sub
処理の流れ
Dim str As Stringで、String型の変数strを宣言します。str = "Hello, World!"で、文字列に値を代入します。For i = 1 To Len(str)で、文字列の長さだけループします。If Mid(str, i, 1) = "," Thenで、文字列内にカンマが存在するかを確認します。- カンマが見つかれば、
Exit Forでループを抜けます。
このコードは、文字列内に特定の文字が存在する位置を探す際に有用です。
FAQ
Q:Exit ForとExit Doの違いは何ですか?
A:Exit ForはForループを途中で抜けるためのステートメントです。一方で、Exit DoはDoループを途中で抜けるためのステートメントです。それぞれのステートメントは、対応するループ構造内でのみ使用できます。
Q:Exit Forを使うと、ループの後の処理は実行されるのですか?
A:はい、Exit Forを使ってループを抜けた後、その後の処理は通常通り実行されます。Exit Forはループを終了するだけで、プログラムの実行自体を停止するわけではありません。
Q:Exit Forを使うと、Nextステートメントは実行されますか?
A:いいえ、Exit Forを使ってループを抜けると、Nextステートメントはスキップされます。そのため、Nextに関連する処理(例えばカウンタ変数の更新など)は行われません。
Q:Exit ForはFor Eachループでも使えますか?
A:はい、Exit ForはFor Eachループでも使用できます。For Eachループ内でExit Forを使うと、そのループは即座に終了します。
Q:Exit Forを使うと、ネストされたループすべてが終了するわけではないですよね?
A:その通りです。Exit Forを使うと、現在のForループだけが終了します。ネストされた外側のループは影響を受けません。外側のループも終了させたい場合は、別途そのループに対してExit Forを使用する必要があります。
Q:Exit ForとGoToの違いは何ですか?
A:Exit Forは特定のForループを終了させる専用のステートメントです。一方、GoToはプログラム内の任意の位置にジャンプするためのステートメントです。GoToはより汎用的ですが、プログラムの流れを追いにくくする可能性があります。
Q:Exit Forを使わずにループを抜ける方法はありますか?
A:はい、条件式を使ってループの継続条件をFalseにすることで、Exit Forを使わずにループを抜けることも可能です。しかし、この方法はコードの可読性が低下する可能性があります。
関連動画
まとめ
VBAでのFor文を途中で抜ける方法は、Exit Forステートメントを使用することで簡単に実現できます。このステートメントは、特定の条件下でループを抜ける際に非常に便利です。今回の記事で紹介した多数のサンプルコードを参考に、ぜひ実際のプログラミングで活用してください。
Excelのショートカットキーの練習
当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。
※推奨ブラウザ Google Chrome
