Excel VBA で繰り返し処理をするとき、「For Each…Next」 と 「配列に読み込んで一括処理」 のどちらを選ぶかで速度や書きやすさが変わります。実務ではこの使い分けが重要です。
For Each…Next の特徴
- メリット
- コレクション(Range, Worksheets, Shapes など)を直感的に処理できる
- 要素数を数える必要がない(自動で最後まで回る)
- コードが読みやすく、初心者にも理解しやすい
- デメリット
- セルを1つずつ処理するため、大量データでは遅い
- 配列に使う場合は取り出し変数を Variant にしないとエラーになる
- 向いている場面
- シートや図形など「コレクション」を対象にする処理
- 数百行程度までのセル処理
- 可読性を優先したいとき
配列に読み込んで一括処理 の特徴
- メリット
- Range.Value を配列に読み込むと、一度のアクセスで大量データを取得できる
- VBA 内で処理するため非常に高速(数千~数万行でも快適)
- 書き戻しも一度で済むので Excel とのやり取りが最小化される
- デメリット
- 配列のインデックス(行・列番号)を意識する必要がある
- コードがやや複雑になり、初心者にはとっつきにくい
- 向いている場面
- 数千行以上のデータ処理(売上、在庫、顧客リストなど)
- 計算や加工を一括で行いたいとき
- 高速化が必須な業務
比較表
| 項目 | For Each…Next | 配列高速化 |
|---|---|---|
| コードの読みやすさ | ◎ わかりやすい | △ 少し複雑 |
| 処理速度 | △ 遅い(大量データに不向き) | ◎ 非常に速い |
| 対象 | コレクション(Range, Worksheets, Shapes) | セル範囲(大量データ) |
| 初心者向け | ◎ 習得しやすい | △ 慣れが必要 |
| 実務での用途 | 小規模処理、シート操作 | 大規模データ処理 |
✅ まとめ
- 少量データやコレクション操作 → For Each
→ 読みやすく直感的。初心者はまずここから。 - 大量データ処理 → 配列高速化
→ Excel とのやり取りを減らして爆速化。実務では必須テクニック。
👉 実務では「まず For Each で書いてみる → 遅いと感じたら配列方式に切り替える」という流れが自然です。


