見出し画像

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 文を使用する
・読み取り専用の走査処理に特に向いている
→ 表示・確認・集計・ログ出力などで可読性が高い

いいなと思ったら応援しよう!

Parusの寺小屋 技術メモや学習の整理として書いています。 もし内容が役に立ったり、続きを読みたいと思っていただけたら、 応援として受け取らせてもらえたら嬉しいです。