〖ExcelVBA・マクロ〗For Eachの基本|Range・Worksheetを順番に処理する書き方【初心者向け】

For Eachの基本 ExcelVBA

VBAで繰り返し処理を書くとき、まず For ~ Next を学ぶ方が多いと思います。

しかし実務では、次のような処理をしたい場面がよくあります。

  • 選択したセルを1つずつ処理したい
  • シートを順番に回して処理したい
  • 何行あるか分からない範囲を安全に回したい

そんなときに便利なのが For Each です。
For Each は、Range や Worksheet などの「集合」を1つずつ処理するための構文です。


スポンサーリンク
スポンサーリンク

For Eachとは?(まずはイメージ)

For Each を一言で言うと、次のイメージです。

「この中に入っているものを、1つずつ全部使う」

数字を数えて回す For ~ Next と違い、
「何個あるか」を意識しなくてよいのが大きな特徴です。


For ~ Next との違い

比較For ~ NextFor Each
回し方数値で回す要素で回す
件数自分で指定する自動で全部
向いている場面回数が決まっている範囲・シートなど

基本①:RangeをFor Eachで処理する

まずは一番よく使う セル範囲(Range) の例です。

Sub Sample_ForEach_Range()

    Dim c As Range

    For Each c In Range("A1:A10")
        c.Value = c.Value * 2
    Next c

End Sub

このコードは、

  • A1~A10のセルを
  • 上から順番に1つずつ取り出して
  • 値を2倍にする

という処理をしています。

ポイント
インデックス(行番号)を一切使っていないので、
初心者でもミスが起きにくい書き方です。


基本②:選択中のセルをFor Eachで処理する

ユーザーが選択したセルだけを処理したい場合も、For Each が最適です。

Sub Sample_ForEach_Selection()

    Dim c As Range

    For Each c In Selection
        c.Interior.Color = vbYellow
    Next c

End Sub

選択されているセルが何個あっても、
自動的にすべて処理されます。


基本③:Worksheet(シート)をFor Eachで回す

次は、シートを1枚ずつ処理する例です。

Sub Sample_ForEach_Worksheet()

    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        ws.Range("A1").Value = ws.Name
    Next ws

End Sub

このコードは、

  • ブック内のすべてのシートを
  • 1枚ずつ順番に処理し
  • A1セルにシート名を書き込む

という処理をしています。


For Eachを使うメリット

  • 件数を数えなくてよい
  • 最終行取得が不要
  • コードが短く、読みやすい
  • 範囲変更に強い

特に初心者のうちは、
For Each を使える場面では積極的に使うのがおすすめです。


よくあるミス①:変数の型が合っていない

For Each の変数は、
回す対象に合った型で宣言する必要があります。

❌ NG例

Dim i As Long
For Each i In Range("A1:A10")
    ' エラーになる
Next i

✅ 正解

Dim c As Range
For Each c In Range("A1:A10")
Next c

よくあるミス②:Nextの後に変数名を書き忘れる

For Each では、Next 変数名までがセットです。

❌ 読みにくい例

For Each c In Range("A1:A10")
    c.Value = 1
Next

✅ おすすめ

For Each c In Range("A1:A10")
    c.Value = 1
Next c

For Eachが向いていないケース

次のような場合は、For ~ Next のほうが向いています。

  • 「5回だけ」など回数が決まっている
  • 逆順で処理したい
  • インデックス番号を使った計算が必要

それ以外の多くのケースでは、For Each のほうが安全です。


実務でよく使うFor Eachの例

  • 空白セルを探す
  • 条件に合うセルだけ色付け
  • 全シートの同じセルを更新
  • 選択範囲をまとめて処理

まとめ:For Eachは初心者の強い味方

  • RangeやWorksheetの処理はFor Eachが基本
  • 件数や最終行を気にしなくてよい
  • コードが短く、読みやすい
  • ミスが起きにくい

VBAを学び始めたら、
For ~ Next と For Each の両方を使い分けられるようになると、 コードのレベルが一段上がります。

まずは、今使っているFor文を1つ、For Eachに書き換えてみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました