Excel VBA | 配列高速化と For Each の使い分けまとめ

VBA
スポンサーリンク

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 で書いてみる → 遅いと感じたら配列方式に切り替える」という流れが自然です。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました