
「セルを1個ずつ処理したいとき、For文より簡単な方法ってあるのかな?」
結論:For Eachなら、範囲内のセルやシートを1つずつ効率的に処理できます!
VBA初心者のうちは、繰り返し処理といえば「For i = 1 To 10」のようなカウント型が思い浮かぶかもしれません。しかし、範囲やコレクション(セル、シート、ブックなど)を扱う場合は「For Each」が圧倒的に便利で安全です。
目次
For Eachとは?どんなときに使う?
For Each は、セル・シート・ブック・グラフなど、複数のオブジェクト(集合体)を1つずつ処理したいときに使います。
たとえば、「A1~A10のセルを全部チェックする」といった処理に最適です。
基本構文と簡単な例
Dim cell As Range For Each cell In Range("A1:A10") cell.Value = "OK" Next cell
ポイント:
cell
は1つずつ取り出される単位(この例ではセル)Range("A1:A10")
の中から1つずつcell
に代入されて処理される- インデックス(iやj)を使わないのでシンプル
For文との違いと使い分け
比較項目 | For文 | For Each |
---|---|---|
対象 | 数字(インデックス) | 範囲・コレクション |
構文 | やや複雑 | シンプルで読みやすい |
エラーの可能性 | 範囲外アクセスに注意 | 範囲に忠実、エラーが起きにくい |
実践例:セルの値をまとめて変更する
Dim rng As Range For Each rng In Range("B2:B11") If rng.Value < 50 Then rng.Interior.Color = RGB(255, 200, 200) ' 赤っぽく塗る End If Next rng
このように、「条件に合うセルだけ色を変える」「空欄セルだけに文字を入れる」などの処理が簡単に書けます。
For Eachが使える対象一覧
オブジェクト | 説明 |
---|---|
Range | セルの集合(例:A1:A10) |
Worksheets | シートの集合 |
Workbooks | ブックの集合 |
Shapes | 図形の集合 |
Cells | セル単位(全セルに対して等) |
よくあるエラーとその回避法
For Each cell In Range("A1:A" & lastRow) ← lastRowが未定義だとエラー
→ 事前に lastRow = Cells(Rows.Count, 1).End(xlUp).Row
のように値を取得しておきましょう。
まとめ:コレクション処理にはFor Eachを!
範囲内を1つずつ処理したいなら、For Eachがシンプルで安全
セルの色を変える、値をチェックするなどに便利
For文と違って「範囲外ミス」が起きにくいので初心者向き
コメント