VBAで自動化 VBA一覧 配列 配列・データ操作

【VBA】配列(Array)の基礎を徹底解説|1次元配列・2次元配列の仕組みと実務での使い方

Excel VBAで業務を自動化していると、「データを効率よく扱いたい」「高速で処理したい」「セル範囲をまとめて取り込みたい」と感じる場面が必ず出てきます。特に、大量データを扱う業務では、セルを1つずつ処理していると動作が重く、時間もかかり、処理全体が非効率になってしまいます。

そんな課題を解決してくれるのが 配列(Array) です。

配列は複数の値をまとめて管理できる“箱”のようなもので、VBAで処理速度を上げるためには欠かせない技術です。セル範囲を一括で配列に読み込み、メモリ上で高速処理してからシートへ書き戻すというスタイルは、多くの現場で当たり前に使われています。

本記事では、配列の基本である 1次元配列と2次元配列 を中心に、宣言方法・使用方法・Rangeとの連携・動的配列・実務活用例まで、体系的に分かりやすく解説します。
配列初心者の方はもちろん、基本を再整理したい中級者にもおすすめの内容です。

目次

✅ 配列(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では最重要の配列です。

参考:【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 は配列ループの基本です。

参考:【VBA】セルの値を変数配列に取得:ループ処理


✅ 配列をシートに書き戻す方法|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自動化の効率と完成度は劇的に向上します。

ぜひ本記事を参考に、実務で積極的に配列を活用してみてください。

    -VBAで自動化, VBA一覧, 配列, 配列・データ操作