はじめに
VBAでFor文などの繰り返し処理を途中で抜けるには、Exitステートメントを使用します。
今回は、使用例をご紹介します。
Exitステートメント
Exitステートメントは「Exit 〇〇」と記入すると処理を飛ばしてくれます。
For文やDoLoop文の場合は下記となります。
For文 → Exit For
Do Loop文 → Exit Do
コード
For文で使用する場合は下記のようになります。
Public Sub Exitを使わない()
Dim ary() As Variant
ary() = Array("あああ", "いいい", "ううう", "えええ", "おおお")
Dim i As Integer
For i = 0 To UBound(ary, 1) Step 1 '配列ary()を1個ずつ回す。
Debug.Print ary(i)
Next
'''イミディエイトウィンドウ
'あああ
'いいい
'ううう
'えええ
'おおお
End Sub
Public Sub Exitを使う()
Dim ary() As Variant
ary() = Array("あああ", "いいい", "ううう", "えええ", "おおお")
Dim i As Integer
For i = 0 To UBound(ary, 1) Step 1 '配列ary()を1個ずつ回す。
If i = 2 Then
Exit For
End If
Debug.Print ary(i)
Next
'''イミディエイトウィンドウ
'あああ
'いいい
End SubExitステートメントを使用している方は、i=2で繰り返し処理を抜けているため、
「あああ」「いいい」のみとなっています。
2重以上のFor文から抜けたい場合
For文の中にFor文がある場合は、「Exit For」を使用しても良いですが、
「Exit For」はFor文1個に対して行う必要がある為、記述が大変です。
私は「GoTo文」をお勧めします。
Public Sub For文が2重ある場合_ExitFor()
Dim ary() As Variant
ReDim ary(2, 2) As Variant
ary(0, 0) = "ゼロ:ゼロ"
ary(0, 1) = "ゼロ:イチ"
ary(0, 2) = "ゼロ:二ー"
ary(1, 0) = "イチ:ゼロ"
ary(1, 1) = "イチ:イチ"
ary(1, 2) = "イチ:二ー"
ary(2, 0) = "二ー:ゼロ"
ary(2, 1) = "二ー:イチ"
ary(2, 2) = "二ー:二ー"
Dim i As Integer
Dim j As Integer
For i = 0 To UBound(ary, 1) Step 1 '配列ary()を1個ずつ回す。
For j = 0 To UBound(ary, 2) Step 1
If (i = 1 And j = 1) Then
Exit For
End If
Debug.Print ary(i, j)
Next
'Exit Forは1回分しか抜けないため、もう一度必要。
If (i = 1 And j = 1) Then
Exit For
End If
Next
'''イミディエイトウィンドウ
'ゼロ: ゼロ
'ゼロ: イチ
'ゼロ: 二ー
'イチ: ゼロ
End Sub
Public Sub For文が2重ある場合_GoTo文()
Dim ary() As Variant
ReDim ary(2, 2) As Variant
ary(0, 0) = "ゼロ:ゼロ"
ary(0, 1) = "ゼロ:イチ"
ary(0, 2) = "ゼロ:二ー"
ary(1, 0) = "イチ:ゼロ"
ary(1, 1) = "イチ:イチ"
ary(1, 2) = "イチ:二ー"
ary(2, 0) = "二ー:ゼロ"
ary(2, 1) = "二ー:イチ"
ary(2, 2) = "二ー:二ー"
Dim i As Integer
Dim j As Integer
For i = 0 To UBound(ary, 1) Step 1 '配列ary()を1個ずつ回す。
For j = 0 To UBound(ary, 2) Step 1
If (i = 1 And j = 1) Then
GoTo BREAK
End If
Debug.Print ary(i, j)
Next
Next
BREAK:
'''イミディエイトウィンドウ
'ゼロ: ゼロ
'ゼロ: イチ
'ゼロ: 二ー
'イチ: ゼロ
End Subおまけ
繰返し処理に用いるExit Forですが、処理自体から抜けたい場合も使用できます。
Public Sub ExitSubを使う()
Debug.Print "処理を開始します。"
Call SubMethod
Debug.Print "処理を終了します。"
'''イミディエイトウィンドウ
'処理を開始します。
'処理中1
'処理中2
'処理中3
'処理を終了します。
End Sub
Private Sub SubMethod()
Debug.Print "処理中1"
Debug.Print "処理中2"
Debug.Print "処理中3"
Exit Sub
Debug.Print "処理中4"
Debug.Print "処理中5"
End Subまとめ
- For文などの繰り返し処理を抜けたい場合は「Exit For」を使用する。
- For文が2重などで処理している場合は、「GoTo文」を使うと良い。
- おまけ 「Exit For」以外にも「Exit Sub」のような使い方もできる。



コメント