「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」と使い分けるのが効率的です。


