
Excelマクロを書き始めたばかりの多くの方が、
一度はぶつかる壁があります。
それが――
「セルを1つずつ処理したいけど、どう回せばいいの?」 問題。
For i = 1 To 100 でも書けそうだけど、
もっとスマートで、ミスが少なく、読みやすい方法があります。
それが今回の主役、
For Each ループ です。
🔍 For Each とは何か?
For Each は、
「指定した範囲の要素を、先頭から順番に1つずつ処理する」
ための構文です。
基本形
For Each 変数 In 対象
処理
Next
Excelマクロでは特に
-
セル
-
行
-
列
-
シート
-
ブック
を回すのに圧倒的によく使われます。
🌱 最初の一歩:セルを順番に処理する
Sub ForEachBasic()
Dim c As Range
For Each c In Range("A1:A5")
Debug.Print c.Value
Next c
End Sub
A1〜A5のセルを、
上から順に自動で回してくれます。
ポイントはここ👇
-
インデックス(i)を自分で管理しなくていい
-
セルが増減してもコードを直さなくていい
初心者ほど、For Eachを使う価値があります。
🧠 なぜ For Each が「鉄板」なのか?
Forループとの比較
' Forループ
Dim i As Long
For i = 1 To 5
Cells(i, 1).Value = i
Next i
' For Each
Dim c As Range
For Each c In Range("A1:A5")
c.Value = "OK"
Next c
| 比較項目 | For | For Each |
|---|---|---|
| インデックス管理 | 必要 | 不要 |
| 可読性 | やや低い | 高い |
| セル増減への強さ | 弱い | 強い |
| 初心者の事故率 | 高め | 低い |
👉 セル処理は For Each が基本 と覚えてOKです。
🎯 実務でよくある使い方①:空白セルをチェック
Sub CheckBlankCells()
Dim c As Range
For Each c In Range("A1:A20")
If c.Value = "" Then
c.Interior.Color = vbYellow
End If
Next c
End Sub
空白セルだけ色を付ける、
超・実務向けの定番処理です。
🎯 実務でよくある使い方②:条件に合うセルだけ処理
Sub ProcessNumericCells()
Dim c As Range
For Each c In Range("B1:B10")
If IsNumeric(c.Value) Then
c.Value = c.Value * 2
End If
Next c
End Sub
前回紹介した IsNumeric() と組み合わせることで、
安全で壊れにくいマクロになります。
🧩 行・列を For Each で回す
行を回す
Dim r As Range
For Each r In Rows("2:10")
r.Hidden = False
Next r
列を回す
Dim col As Range
For Each col In Columns("A:D")
col.AutoFit
Next col
👉 行番号・列番号を意識しなくていいのが最大のメリット。
⚠ よくある初心者のつまずきポイント
❌ 値の配列と勘違いする
For Each c In Range("A1:A5").Value ' ← これはNG
✅ 正しくは
For Each c In Range("A1:A5")
For Each は オブジェクト(Rangeなど)を回すものです。
❌ 変数の型が違う
Dim c As String ' ← NG
Dim c As Range ' ← OK
セルを回すなら必ず As Range。
🪄 応用:UsedRange を For Each で回す
Sub LoopUsedRange()
Dim c As Range
For Each c In ActiveSheet.UsedRange
If c.Value <> "" Then
Debug.Print c.Address & " : " & c.Value
End If
Next c
End Sub
シート内の「使われているセルだけ」を対象にできるため、
処理速度・安全性ともに優秀です。
✨ まとめ:For Each は「Excelマクロの基本動作」
| 処理したいもの | おすすめ |
|---|---|
| セル | For Each |
| 行・列 | For Each |
| シート | For Each |
| ブック | For Each |
「セルを順に処理したい」= For Each
この感覚が身につくと、マクロが一気に書きやすくなります。