VBAでは、同じような処理を複数のセルに対して繰り返したいことがよくあります。そのとき便利なのが「ループ処理」です。この記事では、For
ループやFor Each
ループを使って複数のセルを効率よく操作する方法を解説します。
目次
1. なぜループを使うのか?
たとえば、A列の1行目から10行目までに順番に値を入れたい場合:
Range("A1").Value = 1
Range("A2").Value = 2
Range("A3").Value = 3
'...と続けるのは非効率
このようなコードは手間がかかるうえ、保守性も低くなります。ループ処理を使えば、これを数行で簡潔に記述できます。
2. For ループを使ったセル操作
例:A1~A10に「1〜10」の数字を入力
Sub SetNumbers()
Dim i As Integer
For i = 1 To 10
Range("A" & i).Value = i
Next i
End Sub
i
の値が1から10まで変化し、それに応じてRange("A" & i)
がA1
~A10
を指します。i
をそのまま値として入力しているので、セルにも 1~10 の値が順に入ります。
3. For Eachループを使ったセル操作
特定のセル範囲に対して順番に処理したいときは、For Each
ループが便利です。
例:A1~A10に「完了」と入力する
Sub MarkComplete()
Dim c As Range
For Each c In Range("A1:A10")
c.Value = "完了"
Next c
End Sub
c
はRange("A1:A10")
に含まれる各セルを順番に表します。- それぞれのセルに “完了” という文字列を代入しています。
4. 条件付きで処理を変える(If文と組み合わせ)
ループ内で If
を使えば、条件に応じて処理を分岐できます。
例:B列のA1~A10の値が5以上なら「高い」、それ以外は「低い」と表示
Sub JudgeValues()
Dim i As Integer
For i = 1 To 10
If Range("A" & i).Value >= 5 Then
Range("B" & i).Value = "高い"
Else
Range("B" & i).Value = "低い"
End If
Next i
End Sub
5. 行・列のループ(2重ループ)
表のように行×列で処理するには、2重のForループを使います。
例:A1~C3に「行番号 × 列番号」の値を入れる
Sub FillTable()
Dim i As Integer, j As Integer
For i = 1 To 3
For j = 1 To 3
Cells(i, j).Value = i * j
Next j
Next i
End Sub
Cells(i, j)
は(行, 列)
の形式でセルを指定できます。- 1×1、1×2、1×3… といった乗算結果が3×3の範囲に入ります。
6. ループの種類と使い分けまとめ
ループの種類 | 主な用途 | 特徴 |
---|---|---|
For | 行番号や列番号で制御 | 決まった回数を繰り返すのに適している |
For Each | セル範囲やコレクション操作 | 範囲内のすべての要素に処理を行える |
7. まとめ
- 複数セルに対して同じ処理をしたいときはループ処理が便利。
For
は回数指定型、For Each
は範囲反復型。If
文と組み合わせて、条件に応じた処理分岐も可能。- 表形式データには2重ループが役立つ。
ループ処理はVBAの基本中の基本。これをマスターすれば、より柔軟な自動化ができるようになります!
コメント