VBAのFor〜Nextの使い方|Step・逆順・If条件との組み合わせ

同じ処理を何行にも書き続けるのは非効率です。1000行分のセルに色をつけるのに1000行のコードを書くのは現実的ではありません。そこで登場するのが繰り返し処理の For〜Next 構文です。

この記事では、For〜Next の基本構文から、Step による間隔変更・逆順処理・条件との組み合わせまでを解説します。

For〜Nextの基本構文とは?

指定した範囲の数値を1ずつ増やしながら、同じ処理を繰り返します。

For 変数 = 開始値 To 終了値
    繰り返したい処理
Next

例えば A1〜A1000 のセルを赤く塗る処理は次のように書きます。

Sub bgcolor()
    Dim i As Long
    For i = 1 To 1000
        Cells(i, 1).Interior.Color = RGB(255, 0, 0)
    Next
End Sub

変数 i が 1 から 1000 まで1ずつ増え、A1→A2→A3…と順番に背景色が設定されます。1000行でも3行と同じ量のコードで処理できます。

Stepで増加量を変えるには?

Step を指定すると、カウンターの増加量を変えられます。省略すると自動的に1ずつ増加します。

' 2行おきに処理する(奇数行のみ)
For i = 1 To 1000 Step 2
    Cells(i, 1).Interior.Color = RGB(0, 255, 0)
Next

「1行おきに色を変える」「偶数行だけ処理する」といった場面で便利です。

逆順で処理するには?

Step -1 を使うと、大きい数から小さい数へ逆順に処理できます。行を削除する場合は必ず逆順で処理します。

上から順に行を削除すると、削除後に行番号がずれて意図しない行がスキップされてしまいます。下から処理することでこの問題を回避できます。

' A列に「削除」と書かれた行を下から順に削除する
For i = 1000 To 1 Step -1
    If Cells(i, 1).Value = "削除" Then
        Rows(i).Delete Shift:=xlUp
    End If
Next

If文と組み合わせて条件付き処理をするには?

実務では For〜Next の中に If〜End If を入れて「条件に合う行だけ処理する」パターンがよく使われます。

' A列に特定のキーワードが含まれる場合にB列にコピー
For i = 1 To 1000
    If Cells(i, 1).Value Like "*都道府県*" Then
        Cells(i, 2).Value = Cells(i, 1).Value
    End If
Next

まとめ

  • For i = 開始値 To 終了値 で指定した範囲を繰り返し処理できる
  • Step を指定すると増加量を変えられる(省略時は1ずつ)
  • Step -1 で逆順処理ができる。行削除には必ず逆順を使う
  • If〜End If と組み合わせると「条件に合う行だけ処理」できる
  • Next の後の変数名と Step 1 は省略可能

よくある質問

For〜NextとFor Each〜Nextはどう使い分けますか?

For〜Next は数値のカウンターで繰り返す場合に使います。For Each〜Next はコレクション(セル範囲・シートなど)の各要素を順番に処理する場合に使います。行番号で制御したい場合は For〜Next、全シートや選択範囲の全セルを処理する場合は For Each が適しています。

途中でループを抜けるにはどうすればいいですか?

Exit For を使います。条件に合う行が見つかったら Exit For でループを即座に抜けることができます。不要なループを減らして処理を高速化する際によく使われます。

最終行まで処理するにはどう書けばいいですか?

Cells(Rows.Count, 1).End(xlUp).Row で最終行の行番号を取得できます。これを変数に入れて For i = 2 To lastRow のように書くと、データ件数が変わっても自動的に対応できます。

ネストした(二重の)For〜Nextは使えますか?

使えます。外側のループで行、内側のループで列を処理するなど、表全体を1セルずつ処理したいときに使います。ただしループが深くなるほど処理時間が増えるため注意が必要です。

処理が遅いと感じたらどうすればいいですか?

Application.ScreenUpdating = False を先頭に入れると画面の更新を止めて処理が速くなります。ループ終了後に True に戻すのを忘れないようにしましょう。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール