Excel VBA | For Each の代わりに For i を使う理由

VBA
スポンサーリンク

「For Each…Next」は すべての要素を順番に処理する のに便利ですが、処理する対象を選びたいときインデックス番号を使いたいときには「For i…Next」が有利です。


For i を使うメリット

  • インデックス番号を使える
    → 偶数行だけ処理、特定範囲だけ処理、逆順処理などが可能。
  • 柔軟な制御ができる
    → ステップ幅を指定して「2行おき」「5列おき」などにできる。
  • 条件付き処理が簡単
    If i Mod 2 = 0 のように「偶数だけ」などを簡単に書ける。

コード例

1️⃣ 偶数行だけ処理する

Sub ProcessEvenRows()
    Dim i As Long
    For i = 2 To 100 Step 2   '2行目から100行目まで偶数行だけ
        If IsNumeric(Cells(i, 2).Value) Then
            Cells(i, 2).Value = Cells(i, 2).Value * 1.1
        End If
    Next i
End Sub
VB
  • ポイント: Step 2 を使うと偶数行だけをループできる。

2️⃣ 偶数列だけ処理する

Sub ProcessEvenColumns()
    Dim i As Long
    For i = 2 To 10 Step 2   '2列目から10列目まで偶数列だけ
        Cells(1, i).Value = "偶数列"
    Next i
End Sub
VB
  • ポイント: 列番号を偶数だけ指定して処理。

3️⃣ 配列の偶数番目だけ処理する

Sub ProcessEvenArrayItems()
    Dim arr As Variant
    Dim i As Long
    
    arr = Array("A", "B", "C", "D", "E", "F")
    
    For i = LBound(arr) To UBound(arr)
        If i Mod 2 = 0 Then   '偶数インデックスだけ処理
            Debug.Print "偶数番目: " & arr(i)
        End If
    Next i
End Sub
VB
  • ポイント: i Mod 2 = 0 で偶数インデックスを判定。

4️⃣ 逆順で処理する

Sub ProcessReverse()
    Dim i As Long
    For i = 100 To 1 Step -1   '100行目から1行目へ逆順
        If Cells(i, 1).Value <> "" Then
            Debug.Print Cells(i, 1).Value
        End If
    Next i
End Sub
VB
  • ポイント: Step -1 を使うと逆順処理が可能。

✅ まとめ

  • For Each → 全要素を順番に処理(シンプル・直感的)
  • For i → インデックスを使って柔軟に制御(偶数だけ、逆順、範囲指定など)

👉 実務では「全部処理 → For Each」「条件付きや部分処理 → For i」と使い分けるのが効率的です。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました