この記事では、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