VBA|制御構造|For Each…Next|配列やコレクションを要素単位で繰り返し処理する
■ 基本構文
For Each 要素変数 In コレクション
' 繰り返し処理
Next 要素変数
○ コレクションや配列の 各要素を順に処理する
○ カウンタ変数は不要
○ 戻り値は持たない(制御構造)
■ サンプルコード
サンプル①:配列(Variant Array)を For Each で処理する
役割:配列内の各要素を1つずつ取得する
理由:要素数や添字を意識せず処理できる
注意:配列の要素順は保持される
Dim arr As Variant
Dim v As Variant
arr = Array("A", "B", "C")
For Each v In arr
Debug.Print v
Next v
サンプル②:Range コレクションのセルを For Each で処理する
役割:指定範囲のセルを順番に処理する
理由:行番号・列番号を管理せずに済む
注意:Range の指定範囲が処理対象そのものになる
Dim cell As Range
For Each cell In Range("A1:A5")
cell.Value = "OK"
Next cell
サンプル③:オブジェクトコレクション(Worksheets)を処理する
役割:Workbook 内の全シートを1枚ずつ処理する
理由:シート数の増減に強い
注意:処理順はインデックス順になる
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Name
Next ws
■ 備考
・配列の要素数を意識せず処理できる
・インデックス指定が不要なため記述が簡潔
・特定の位置を操作したい場合は For 文を使用する
・For Each 中は要素の追加・削除を行わない
→ コレクション操作を行うと予期せぬ動作やエラーの原因になる
・要素の位置(何番目か)が必要な処理には向かない
→ インデックスが必要な場合は For 文を使用する
・読み取り専用の走査処理に特に向いている
→ 表示・確認・集計・ログ出力などで可読性が高い
いいなと思ったら応援しよう!
技術メモや学習の整理として書いています。
もし内容が役に立ったり、続きを読みたいと思っていただけたら、
応援として受け取らせてもらえたら嬉しいです。