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 コマンドは必要な場合にのみ利用するようにしましょう。

プログラムのロジックを明確にし、より良いコードを目指すことが重要です。

#VBA