Forループのスキップ(Continue)
VBA では、For ループを使って繰り返し処理を行うことが一般的ですが、特定の条件下でループの残りの部分をスキップして次のイテレーションに進みたい場合があります。
この記事では、そのような場合に GoTo コマンドを使って次のループへスキップする方法を紹介します。
For ループ内で次のループへスキップする方法
まず結論として、For ループ内で次のループへスキップするには、GoTo コマンドを使います。
GoTo コマンドは、指定したラベルにジャンプするコマンドです。VBA には、Continue
コマンドが存在しないため、GoTo
コマンドを使用してFor
ループの終了直前にラベルを設定し、GoTo
コマンドでラベルにジャンプすることで、次のループへスキップすることができます。
以下の VBA コード例は、1 から 10 までの数字をループし、各数字が奇数の場合はその数をログに出力し、偶数の場合は次のループへスキップするものです。
Public Sub ForLoopWithGoTo()
Dim i As Integer
For i = 1 To 10
If i Mod 2 = 0 Then ' 数字が偶数の場合
GoTo NextIteration ' 次のループへスキップ
End If
Debug.Print i ' 奇数の場合は数字をログに出力
NextIteration:
Next i
End Sub
このコードでは、If i Mod 2 = 0 Then
の条件を満たした場合(つまり、i が偶数の場合)、
GoTo NextIteration
コマンドによってラベルNextIteration:
にジャンプし、For
ループの次のイテレーションに進みます。
サンプルコード中のIF
文を任意の条件を設定することで、任意の条件下で次のループへスキップすることができます。
GoTo コマンドについて
GoTo
コマンドは、プログラムの流れを指定されたラベルの位置にジャンプさせるために使用されます。
ラベルは、コロン(:)が付いた任意の名前で、コード内の特定の位置を示します。
GoTo
コマンドについては、以下のページで詳しく解説しています。
GoTo コマンドを使用する際の注意点
GoTo
コマンドは、現在多くのプログラミング言語では非推奨、もしくは実装されていません。
これは、GoTo
コマンドがプログラムの流れを不透明にし、コードを読みにくくする可能性があるためです。
また、ラベルは同じプロシージャ内でのみ有効であり、別のプロシージャやモジュールにはジャンプできません。
GoTo コマンドの乱用は、プログラムの保守性を低下させるため、可能な限り制御構造(If-Then-Else、Select Case など)を使用してコードを書くことが推奨されます。
今回のFor
ループ内でのGoTo
コマンドの使用は、特定の条件下でループをスキップするための例外的な使用方法として理解してください。
まとめ
VBA で For ループ中に次のイテレーションへスキップしたい場合、GoTo コマンドを使用することで実現できます。
ただし、プログラムの可読性と保守性を考慮して、GoTo コマンドは必要な場合にのみ利用するようにしましょう。
プログラムのロジックを明確にし、より良いコードを目指すことが重要です。