MENU

【初心者向け】Excel VBAでFor Eachを使いこなす!範囲内のセルを1つずつ処理する方法

A子さん

「セルを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文と違って「範囲外ミス」が起きにくいので初心者向き

関連記事リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次