【VBA】Forループで、残りの処理をスキップして次のループに進む方法

目次

はじめに

VBAで For ループを使って繰り返し処理を行う際、「特定の条件を満たした時だけ、その回のループ内の残りの処理をスキップして、すぐに次の繰り返しに進みたい」という場面がよくあります。

他のプログラミング言語には、このような場合に Continue For のような専用の命令が用意されていることがありますが、VBAにはそれに直接対応する命令がありません。

しかし、If ステートメントの構造を工夫することで、同様の動作を簡単に、そして分かりやすく実現できます。この記事では、For ループの現在の回を途中で切り上げて、次の回に進むための最も一般的な方法を解説します。


ループ内の処理をスキップするVBAサンプルコード

このマクロは、商品リストを上から順にチェックし、もし「在庫状況」列(C列)が “在庫なし” だったら、その行の金額計算は行わずに、次の商品の行へ処理を移します。

完成コード

' 特定の条件でループ内の後続処理をスキップする
Sub SkipLoopIteration()
    Dim i As Long
    Const DISCOUNT_RATE As Double = 0.9 ' 10%割引
    
    ' 2行目から10行目までをループ
    For i = 2 To 10
        '--- C列の在庫状況をチェック ---
        ' もし値が "在庫なし" でなければ、Ifブロック内の処理を実行する
        If Cells(i, "C").Value <> "在庫なし" Then
        
            '--- スキップさせたくない、メインの処理 ---
            ' D列の価格に割引率を掛けて、E列に割引後価格を計算
            Cells(i, "E").Value = Cells(i, "D").Value * DISCOUNT_RATE
            
            Debug.Print i & "行目を処理しました。"
            
        End If
        ' "在庫なし" の場合は、Ifブロックが実行されず、そのまま次のNext iへ進む
    Next i
    
    MsgBox "処理が完了しました。"
End Sub

コードの解説

If Cells(i, "C").Value <> "在庫なし" Then ... End If

この If ブロックの構造が、処理をスキップするための鍵となります。

  • 条件式: Cells(i, "C").Value <> "在庫なし" は、「C列の値が “在庫なし” ではない」という条件です。
  • 動作:
    • 条件が True の場合(”在庫あり” や空白など)、IfEnd If の間に書かれたメインの処理(金額計算など)が実行されます。
    • 条件が False の場合(”在庫なし” だった場合)、IfEnd If の間の処理は全てスキップされ、プログラムは End If の次の行、つまり Next i に直接進みます。これにより、ループの次の回(次の行)に移ることができます。

GoTo を使わない理由

ご提示のコードのように GoTo ステートメントを使ってループの最後にジャンプする方法も機能的には可能ですが、一般的には非推奨とされています。GoTo を多用すると、プログラムの処理の流れが上から下へという自然な流れではなくなり、コードが非常に読みにくく、メンテナンスしにくい(いわゆる「スパゲッティコード」)ものになる傾向があるためです。

特別な理由がない限りは、If ブロックで処理を囲む方法のほうが、構造が分かりやすく、安全で推奨される書き方です。


まとめ

今回は、VBAの For ループ内で、特定の回の処理をスキップして次に進む方法を解説しました。

  • VBAには Continue For のような専用命令はない。
  • 実行したいメインの処理全体を、If 条件 Then ... End If で囲むのが、最もシンプルで推奨される方法。

このテクニックを使えば、データリストの中から特定の条件を満たす行だけを対象に処理を行う、といった柔軟な繰り返し処理を、クリーンなコードで記述することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次