【Excel】繰り返し For 〜 Next

Excelマクロ

繰り返し処理「For Next」の基本と応用

「繰り返し処理」は、マクロを効率よく動作させる上で欠かせない内容です。

もしも、この繰り返しするコードを利用しない場合、例えば、各行に順番に色をつけていこうとしています。

Cells(1, 1).Interior.Color = RGB(255, 0, 0)
Cells(2, 1).Interior.Color = RGB(255, 0, 0)
Cells(3, 1).Interior.Color = RGB(255, 0, 0)

このコードでは、A列の背景色を1行ずつ設定しています。3行程度の処理であれば、これでいいかもしれませんが、実務上で3行だけしか処理しないということはほとんどありませんよね?

この処理対象が1000行や10000行になると、このまま続けるとコードの量が膨大になり、コードを書くことに疲弊して、せっかく効率化のためにマクロに取り組んだのに、本末転倒になってしまいます。

ここで登場するのが今回の繰り返し処理を行うために「For Next」構文です。

For構文の使い方

For Next構文は、一定の範囲内で処理を繰り返す場合に使用します。

基本形は次の通りです。

For 変数 = 開始値 To 終了値 Step 増減値
    繰り返したい処理
Next 変数
  • 開始値: 繰り返しを始める数値
  • 終了値: 繰り返しを終える数値
  • 増減値: 繰り返し時の変化量(省略すると1ずつ増える)

開始値、終了値とかくと、少々わかりづらいですが、例えば、1行目〜100行目まで処理したい場合、「開始値:1」「終了値:100」と記載することで1〜100行目を順番に処理してくれるコードになります。

コード例

次のコードでは、変数 i が1から1000まで1ずつ増加し、A列のセルの背景色が順番に赤く塗られます。

コードをシンプルにするためにこのような説明をしましたが、実務上はここにさらに「IF構文」などを使い、各行の状況に応じて、「その行のA列が◯であれば、色をつける」など、条件を判断した上で色をつけるようなコードを作ることが多いです。

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

応用例と注意点

基本的な例をお話ししましたが、さらに応用して利用することができます。

増減値の話をしませんでしたが、増減値は省略すると基本的には1ずつ増加するので、先ほどのように1〜100行とすると、1、2、3、4、5・・・と順番に処理をしていきます。

この増減値は省略せずに増減値を2以上などのすることが可能です。

増加量(Step)の変更

例えば、「2行おき」に処理をする場合、Stepの後は2とすれば、2行ごとに処理をします。

交互に色をつけたい場合など、白、グレー、白、グレー・・・のように処理をさせることができます。

For i = 1 To 1000 Step 2
  Cells(i, 1).Interior.Color = RGB(0, 255, 0)
Next
「逆順」に処理する

また、プラスだけでなく、マイナスの処理をすることができます。

よく利用する場面としては行の削除や、列の削除をする場合には、行や列が移動してしまうので、上から順番に処理すると、思っていた動作になりません。

例えば、5行目が削除された場合、元々の6行目が5行目になりますが、マクロの動作は4、5、6・・・と進んでいくため、5行目が削除されたら、次は6行目の動作を行いますが、5行目が削除された後の6行目というのは、元の7行目になるわけです。

そのため、元の6行目(新しい5行目)に関しては、何も動作せずになってしまいます。

これを回避するためには、「行を削除したら上に詰まる」動作を理解した上で、下から順番に操作を行えば、元の行が移動したとしても、影響を受けることはありません。

これについては、例えば、次のようなコードを書きます。

For i = 1000 To 1 Step -1
  If Cells(i, 1).Value = "削除" Then
    Rows(i).Delete Shift:=xlUp
  End If
Next

このコードを記載すれば、A列に「削除」と入力されていれば、削除されますが、行が削除されたとしても、7、6、5の順番で処理されるので、仮に6行目が削除されても、次の5行目は元の5行目のままなので問題ない、ということです。

For構文の省略

For構文の記載内容は一部、省略することができます。

Step 1 は省略可能です。
Next の後に変数名を書く必要もありません。

For i = 1 To 1000
  Cells(i, 1).Interior.Color = RGB(255, 0, 0)
Next

    実用例:条件に基づく処理

    For Next は、セルや行の内容に応じた柔軟な操作にも活用できます。

    先ほども記載した例もありますが、例えば、次のような処理が可能です。

    指定の条件で削除
    A列の値が「削除」の場合、その行を削除

    For i = 1000 To 1 Step -1  If Cells(i, 1).Value = "削除" Then
        Rows(i).Delete Shift:=xlUp
      End If
    Next

    特定の文字列に応じた処理
    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 Nextは、「行ごと」「列ごと」「シートごと」など、繰り返し処理を効率化するための構文です。

    今回の例ではセルの背景色を操作しましたが、条件付きでコピーや削除を行うなど、様々な応用が可能です。

    繰り返し処理はマクロの基本機能の一つなので、ぜひ習得して業務の効率化に役立てましょう!

    コメント