Excel VBAで業務を自動化していると、「データを効率よく扱いたい」「高速で処理したい」「セル範囲をまとめて取り込みたい」と感じる場面が必ず出てきます。特に、大量データを扱う業務では、セルを1つずつ処理していると動作が重く、時間もかかり、処理全体が非効率になってしまいます。
そんな課題を解決してくれるのが 配列(Array) です。
配列は複数の値をまとめて管理できる“箱”のようなもので、VBAで処理速度を上げるためには欠かせない技術です。セル範囲を一括で配列に読み込み、メモリ上で高速処理してからシートへ書き戻すというスタイルは、多くの現場で当たり前に使われています。
本記事では、配列の基本である 1次元配列と2次元配列 を中心に、宣言方法・使用方法・Rangeとの連携・動的配列・実務活用例まで、体系的に分かりやすく解説します。
配列初心者の方はもちろん、基本を再整理したい中級者にもおすすめの内容です。
目次
- ✅ 配列(Array)とは?|複数の値をまとめて扱う仕組み
- ・配列は「データのかたまり」をまとめて管理できる入れ物
- ・配列を使うメリット
- ✅ 配列の構造|1次元と2次元の違いを理解する
- ・1次元配列
- ・2次元配列
- ✅ 1次元配列の基本|宣言・代入・ループ処理
- ・最も基本的な1次元配列の宣言
- ・値を代入
- ・ループで処理
- ✅ 動的配列(ReDim)|サイズが不明なデータに対応
- ・宣言(初期サイズなし)
- ・サイズを後から定義
- ・サイズ変更時の Preserve
- ・動的配列の実務的用途
- ✅ 2次元配列の基本|Excel表データに最適
- ・宣言
- ・代入の例
- ✅ Rangeをそのまま配列に読み込む方法(実務で最重要)
- ・最もよく使うコード
- ✅ 配列のループ処理|UBound・LBound の使い方
- ・配列の上限・下限を取得
- ・ループ例
- ✅ 配列をシートに書き戻す方法|Resizeを必ず使う
- ❗ 配列を使うと劇的に高速化する理由
- ❗ 配列でよくあるトラブルと注意点
- ・① 行列の順序を間違える
- ・② Variant配列の扱いミス
- ・③ Preserve の制限
- ・④ 空白行を含む場合の分岐処理
- ・⑤ 配列のサイズを固定しているとエラーが出る
- ❗ 1次元配列と2次元配列の違いを誤解しやすい
- ・1次元配列は arr(i)
- ・2次元配列は arr(i, j)
- ✅ 実務で役立つ配列活用例
- ✅ 応用:配列とWorksheetFunctionを組み合わせる
- ❗ RPA(UiPath)と配列の相性が非常に良い
- ❗ 配列を扱う前の実務チェックリスト
- ✅ まとめ:配列を理解するとVBA自動化スキルが一気にレベルアップする
✅ 配列(Array)とは?|複数の値をまとめて扱う仕組み
・配列は「データのかたまり」をまとめて管理できる入れ物
通常の変数は 1つの値しか持てません。
Dim x As Long '1つだけ
一方、配列は複数の値をまとめて格納できます。
Dim arr(0 To 4) As Long '5個の値が入る
・配列を使うメリット
データをひとまとめで扱える
ループと相性が良く処理が簡潔になる
表データを高速に処理できる
変更や検索が簡単
大量データでも処理が高速
特に Excel では「セル範囲を配列として扱う」ことが高速化の要になります。
✅ 配列の構造|1次元と2次元の違いを理解する
・1次元配列
→ 一列に並んだデータ
例:商品一覧、数値リストなど
・2次元配列
→ 行 × 列 の表形式データ
例:Excelのシートと同じ構造
VBAでExcel操作を自動化する際、2次元配列が最もよく使われます。
✅ 1次元配列の基本|宣言・代入・ループ処理
・最も基本的な1次元配列の宣言
Dim arr(0 To 4) As Long
5個の箱が用意されます。
・値を代入
arr(0) = 10
arr(1) = 20
arr(4) = 50
・ループで処理
Dim i As Long
For i = 0 To 4
Debug.Print arr(i)
Next i
・実務での使用例
コード一覧の管理
エラーメッセージ一覧
条件分岐の選択肢
顧客IDや商品コードの一覧化
1次元配列は「単純なリスト」を扱うときに便利です。
✅ 動的配列(ReDim)|サイズが不明なデータに対応
実務では、配列のサイズが最初から分からないことが多いため、動的配列 を使います。
・宣言(初期サイズなし)
Dim arr() As Variant
・サイズを後から定義
ReDim arr(1 To 10)
・サイズ変更時の Preserve
ReDim Preserve arr(1 To newSize)
Preserve で変更すると、中の値が保持されます(ただし最後の次元のみ変更可)。
・動的配列の実務的用途
未知の件数のデータを格納
条件に一致したデータを格納
配列の増減に対応した処理
✅ 2次元配列の基本|Excel表データに最適
Excelの表(行×列)の構造そのままが 2次元配列 です。
・宣言
Dim arr(1 To 5, 1 To 3) As Variant
これで「5行 × 3列」の配列ができます。
・代入の例
arr(1, 1) = "A"
arr(3, 2) = 100
2次元配列は、表形式のデータをそのまま扱えるため、VBAでは最重要の配列です。
✅ Rangeをそのまま配列に読み込む方法(実務で最重要)
Excelのセル範囲は、配列に読み込むと一気に高速処理が可能になります。
・最もよく使うコード
Dim arr As Variant
arr = Range("A1:C10").Value
これで
10行 × 3列の2次元配列 が作成されます。
・メリット
セルを1つずつ触るより圧倒的に高速
ループで扱いやすい
計算や判定をメモリ上で行える
一括で書き戻し可能
大量データ処理では必須の技術です。
✅ 配列のループ処理|UBound・LBound の使い方
・配列の上限・下限を取得
Dim maxRow As Long
Dim maxCol As Long
maxRow = UBound(arr, 1) '行の最終
maxCol = UBound(arr, 2) '列の最終
・ループ例
For i = 1 To maxRow
For j = 1 To maxCol
Debug.Print arr(i, j)
Next j
Next i
UBound / LBound は配列ループの基本です。
✅ 配列をシートに書き戻す方法|Resizeを必ず使う
配列を編集した後にシートへ戻すには、
Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
・メリット
一括反映で秒速書き込み
範囲指定ミスがない
構造が明確でミスが減る
❗ 配列を使うと劇的に高速化する理由
Excelはセル操作が重く、
以下の操作はすべて遅い 部類です:
セルへ1件ずつ書き込む
セル1つずつ読み込む
ループでセルにアクセスする
一方、配列を使えば――
シート → 配列:一括取り込み
配列の処理:超高速
配列 → シート:一括書き込み
この流れにするだけで、
10倍以上の高速化が期待できます。
❗ 配列でよくあるトラブルと注意点
・① 行列の順序を間違える
→ arr(行, 列) の順で必ず扱う
・② Variant配列の扱いミス
→ Rangeを配列にすると Variant 型になる
・③ Preserve の制限
→ 最後の次元しか変更不可
・④ 空白行を含む場合の分岐処理
→ 配列処理前にデータ整形が必要
・⑤ 配列のサイズを固定しているとエラーが出る
→ 動的配列で柔軟に対応すべき
❗ 1次元配列と2次元配列の違いを誤解しやすい
・1次元配列は arr(i)
・2次元配列は arr(i, j)
Excelの Range → 配列 の場合
必ず2次元配列になります。
例:Range("A1:A10")
→ 10行 × 1列の2次元配列
(1次元ではない)
✅ 実務で役立つ配列活用例
・顧客データの一覧を配列化し検索に利用
・複数条件によるデータ抽出
・重複判定(Dictionaryとの併用)
・集計処理の高速化
・RPA連携用のデータ整形
・ログの蓄積・一括保存
配列は「大量データ・高速処理」に欠かせません。
✅ 応用:配列とWorksheetFunctionを組み合わせる
配列と Excel の関数を組み合わせると、高度な集計が可能です。
例:配列内の最大値
MaxVal = WorksheetFunction.Max(arr)
配列を使うことで Excel関数との連携もスムーズになります。
❗ RPA(UiPath)と配列の相性が非常に良い
UiPathはセルの読み書きに弱いため、
VBAで配列処理
データ整形
クリーンデータとしてRPAへ渡す
という流れが非常に効果的です。
VBAで配列処理 → UiPath → Excel出力
という構成は現場でよく使われます。
❗ 配列を扱う前の実務チェックリスト
データ量は多いか?
表形式か?
1次元 or 2次元?
動的サイズが必要か?
配列の書き戻し範囲は適切か?
結合セルが含まれていないか?
空白行やエラー行の前処理は済んでいるか?
✅ まとめ:配列を理解するとVBA自動化スキルが一気にレベルアップする
配列は VBA における最重要技術のひとつであり、Data操作・高速化・検索・分析など、ほぼすべての自動化に関わります。
1次元配列は“リスト”
2次元配列は“Excelの表”
Rangeを配列に読み込むと爆速処理
動的配列(ReDim)は必須テクニック
UBound / LBound はループ処理の基本
実務では配列による高速処理が欠かせない
RPAと組み合わせると安定性が増す
配列を使いこなせるようになると、
Excel自動化の効率と完成度は劇的に向上します。
ぜひ本記事を参考に、実務で積極的に配列を活用してみてください。