VBAで繰り返し処理を作成していると、
「1行おきに処理したい」
「偶数行だけ処理したい」
「2列ずつデータを処理したい」
といった場面に遭遇することがあります。
しかし、すべての行を1つずつ処理してしまうと、
処理時間が無駄に長くなったり、不要なデータまで処理してしまったりすることがあります。
そこで重要になるのが、
For Nextで「2ずつ増やす」処理です。
この考え方を理解しておくと、
処理の効率化だけでなく、
コードの意図が明確になり、保守性の高いマクロを作成できるようになります。
この記事では、
For Nextで2ずつ増やす基本構文から、実務での活用例、注意点、設計の考え方まで
実務目線で分かりやすく解説していきます。
目次
- ✅ VBA For Nextで2ずつ増やす基本構文
- ・基本構文:Stepを使って2ずつ増やす例
- ✅ VBAで1行おきに処理する具体例
- ・例:2行目から1行おきに処理する方法
- ・実務での活用例
- ✅ VBAで偶数行・奇数行だけ処理する方法
- ・例:偶数行のみ処理する方法
- ・なぜStepで制御するのか
- ✅ For Nextを2ずつ増やすときの実務上の注意点
- ・注意:最終行を超えないようにする
- ・注意:Stepの指定忘れ
- ・注意:逆方向ループとの組み合わせ
- ✅ For Nextで2ずつ増やす処理を高速化に活かす考え方
- ・例:無駄なループを減らす設計
- ✅ VBAで2ずつ増やす処理を関数化して再利用する設計
- ・例:2ずつ増やす処理をサブルーチン化する方法
- ・なぜ関数化・サブルーチン化するのか
- ✅Excelユーザーへの一歩先の提案:VBAで処理を完全自動化する
- ✅ まとめ:VBA For Nextで2ずつ増やす処理は実務の基本テクニック
✅ VBA For Nextで2ずつ増やす基本構文
For Nextで2ずつ増やす処理は、VBAを使い始めた直後にはあまり意識されないことが多いですが、実務では非常に頻繁に使用されます。特に、1行おきのデータや、偶数行・奇数行だけを処理する場合、この仕組みを理解していないと、無駄な処理が増えてしまいます。また、Stepの意味を正しく理解していないと、意図しない動作を引き起こす原因にもなります。単に「動くコード」を書くだけでなく、「なぜその増え方にするのか」を理解することが重要です。この章を読まずに自己流で書いてしまうと、後から修正が難しくなるケースもあります。ここで基本構文をしっかり押さえておきましょう。
・基本構文:Stepを使って2ずつ増やす例
Dim i As Long
For i = 1 To 10 Step 2
Debug.Print i
Next i
このコードでは、
- 1から開始
- 10まで繰り返し
- 2ずつ増加
という動作になります。
実行結果:
1
3
5
7
9
ここで重要なのは、
**Stepを省略すると自動的に「1ずつ増える」**という点です。
つまり、
For i = 1 To 10
は、
For i = 1 To 10 Step 1
と同じ意味になります。
✅ VBAで1行おきに処理する具体例
実務では、すべての行を処理するのではなく、「1行おき」や「2行おき」に処理したい場面が頻繁にあります。例えば、帳票データで偶数行が明細、奇数行が見出しになっている場合などです。このようなデータ構造を理解せずにすべての行を処理してしまうと、不要なデータまで処理してしまう可能性があります。また、条件分岐でスキップするよりも、最初からStepで制御する方が、コードの可読性が高くなります。処理速度の面でも無駄が減り、結果として安定したマクロになります。この章では、実務で最もよく使われる「1行おき処理」の具体例を確認していきます。
・例:2行目から1行おきに処理する方法
Dim rowIndex As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For rowIndex = 2 To lastRow Step 2
Cells(rowIndex, 2).Value = "処理済"
Next rowIndex
この処理は:
- 2行目から開始
- 最終行まで
- 2行おきに処理
という意味になります。
・実務での活用例
例えば:
- 偶数行がデータ行
- 奇数行が説明行
- 1行おきに入力されたデータ
といったケースです。
✅ VBAで偶数行・奇数行だけ処理する方法
偶数行だけ処理したい、または奇数行だけ処理したいという要望は、実務では非常に一般的です。特に、外部システムから出力されたデータや、帳票形式のデータでは、このような構造がよく見られます。ここで重要なのは、条件分岐を使って判断するのではなく、最初からStepで制御するという考え方です。これにより、コードの意図が明確になり、処理速度も向上します。また、後から仕様変更があった場合にも、修正箇所が最小限で済みます。この章では、偶数行・奇数行の処理方法を具体的に解説します。
・例:偶数行のみ処理する方法
Dim rowIndex As Long
For rowIndex = 2 To 20 Step 2
Cells(rowIndex, 1).Interior.Color = vbYellow
Next rowIndex
このコードでは:
- 偶数行のみ
- 背景色を変更
という処理になります。
・なぜStepで制御するのか
例えば、次のようなコードも書けます。
For i = 1 To 20
If i Mod 2 = 0 Then
' 偶数行処理
End If
Next i
しかし、この方法は:
- 全行をチェックする
- 条件判定が増える
- 可読性が下がる
というデメリットがあります。
一方、Stepを使うと:
- 不要な処理をしない
- コードがシンプル
- 意図が明確
になります。
ここまでで、偶数行や奇数行だけを処理する方法が理解できたと思います。
次のステップとして重要になるのは、
複数の条件や複数の対象を同時に処理するループ設計です。
より実務に近い処理を実現したい場合は、
「【VBA】For Nextを2つ(複数)同時に使用する方法|二重ループを安全に使いこなす実務設計」もあわせて確認しておきましょう。
✅ For Nextを2ずつ増やすときの実務上の注意点
Stepを使った処理は非常に便利ですが、正しく理解していないと、思わぬバグを引き起こすことがあります。特に、最終行の扱いや、開始位置の設定を誤ると、データが処理されない、または処理しすぎるといった問題が発生します。また、逆方向のループと組み合わせる場合には、Stepの符号にも注意が必要です。こうした基本的な注意点を知らずに実装すると、後から原因不明の不具合に悩まされることになります。この章では、実務で特に重要な注意点を整理しておきます。
・注意:最終行を超えないようにする
For i = 2 To lastRow Step 2
ここで重要なのは:
開始位置とStepの関係
です。
例えば:
- 最終行が奇数
- 開始が偶数
の場合、最後の行は処理されません。
これは仕様として正しいかどうかを、必ず確認する必要があります。
・注意:Stepの指定忘れ
For i = 2 To lastRow
この場合:
1ずつ増える
ため、
- 意図しない処理
- 重複処理
が発生する可能性があります。
・注意:逆方向ループとの組み合わせ
For i = lastRow To 1 Step -2
このように、
Stepはマイナスにもできる
ことを覚えておきましょう。
✅ For Nextで2ずつ増やす処理を高速化に活かす考え方
処理速度の改善という観点でも、Stepを使った制御は非常に重要です。特に、大量データを扱う場合、不要なループが増えるだけで処理時間が大きく変わります。また、処理対象が明確になることで、エラーの発生率も低下します。単に「速くする」ためではなく、「必要な処理だけを行う」という設計思想が重要になります。この考え方を理解しておくと、後から大規模なデータを扱うことになった場合でも、安定したマクロを作成できるようになります。この章では、性能面から見たStepの重要性を解説します。
・例:無駄なループを減らす設計
悪い例:
For i = 1 To 10000
If i Mod 2 = 0 Then
' 処理
End If
Next i
良い例:
For i = 2 To 10000 Step 2
' 処理
Next i
この違いは:
- 処理回数が半分になる
- 条件判定が不要
- 可読性が高い
という点です。
ここまでで、Stepを使って無駄なループを減らすことで、
処理を効率化できることが理解できたと思います。
さらに処理速度を改善するためには、
条件に応じて不要な処理をスキップする設計も非常に重要になります。
具体的なスキップ処理の実装方法については、
「【VBA】For文:特定の条件の場合 次のループへ進む(スキップ)方法」もあわせて確認しておきましょう。
✅ VBAで2ずつ増やす処理を関数化して再利用する設計
同じ処理を複数の場所で使う場合、コードをコピーして使い回すのは非常に危険です。仕様変更が発生したときに、すべての箇所を修正しなければならなくなるからです。そこで重要になるのが、処理の共通化です。特に、繰り返し処理のような基本機能は、関数やサブルーチンとしてまとめておくことで、保守性が大きく向上します。また、コードの意図が明確になり、他の担当者にも理解しやすくなります。この章では、再利用性を高める設計の考え方を紹介します。
・例:2ずつ増やす処理をサブルーチン化する方法
Sub ProcessEverySecondRow()
Dim rowIndex As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For rowIndex = 2 To lastRow Step 2
Cells(rowIndex, 3).Value = "チェック済"
Next rowIndex
End Sub
・なぜ関数化・サブルーチン化するのか
理由:
- 修正箇所が1か所になる
- 再利用できる
- 保守性が向上する
これは、実務では非常に重要な設計です。
✅Excelユーザーへの一歩先の提案:VBAで処理を完全自動化する
もし現在:
- 手作業で1行おきに処理している
- フィルター操作を繰り返している
- 条件付き書式で確認している
という場合は、
VBAで処理を自動化することで、作業時間を大幅に削減できます。
特に:
- 重複データ処理
- 最新データ管理
- 一括更新
- 一括削除
といった業務では、VBAの効果は非常に大きくなります。
✅ まとめ:VBA For Nextで2ずつ増やす処理は実務の基本テクニック
- Stepを使うことで2ずつ増やす処理ができる
- 1行おき・偶数行・奇数行の処理に対応できる
- 条件分岐よりもシンプルで高速になる
- 処理対象を明確にできる
- 再利用可能な設計につながる
For Nextで2ずつ増やす処理は、
単なるテクニックではなく、
効率的で安全なマクロ設計の基本です。
この考え方を身につけておくことで、
将来より大きなデータや複雑な処理を扱う場合でも、
安定した自動化を実現できるようになります。
ぜひ、実際の業務データで試してみてください。