VBAの配列の基本と使い方まとめ|1次元・2次元・動的・Functionの戻り値まで徹底解説!

VBAの配列の基本と使い方まとめ|1次元・2次元・動的・Functionの戻り値まで徹底解説!

「VBAでデータを一括処理したいけど、ループが長くて大変……」
「配列って便利と聞くけど、いまいち使い方がわからない」

そんなふうに感じたことはありませんか?

配列は、VBAで複数のデータをまとめて扱うための強力なツールです。うまく使いこなせば、処理速度の向上コードの簡略化が実現でき、作業の効率がぐっとアップします。

この記事では、VBAの配列について、
初心者〜中級者の方が「実務で使える」ことを目標に、次のような内容をやさしく解説していきます。

  • 配列の種類(1次元・2次元・多次元・動的)

  • 配列の使い方(データの格納・ループ処理)

  • 配列の応用(Functionの戻り値や検索処理)

  • よくあるエラーやつまずきポイント

配列を初めて使う方にも、少しだけ使ったことがあるという方にも役立つ内容になっていますので、ぜひ参考にしてみてください。

VBA配列の基本|1次元・2次元・多次元・動的の違い


1次元配列|最も基本的な配列の形

1次元配列は、リスト形式でデータを順番に格納する構造です。
複数の値を1つの変数にまとめて扱いたい場合に便利です。

Dim fruits(1 To 3) As String
fruits(1) = "りんご"
fruits(2) = "バナナ"
fruits(3) = "ぶどう"

このようにすれば fruits(1)fruits(3) にアクセスでき、For文などを使って一括処理も可能です。

1次元配列

※データを入れる箱がNo.1~No.3まで、計3つあります。
データの広がりは直線的で、比較的管理がしやすいです。
複数のデータを一つの配列に格納することで、 繰り返し処理や複雑な関数のやり取りを記載しやすくなります。


2次元配列|行と列のデータをまとめて管理

2次元配列は「表」のように、行と列の両方でデータを管理できます。
表形式のデータを扱う場面(例:売上表や出勤表など)でよく使われます。

Dim sales(1 To 3, 1 To 2) As Long
sales(1, 1) = 1000 '1行1列目
sales(1, 2) = 1200 '1行2列目

処理するときは、2重のFor文でループするのが一般的です。

2次元配列

※データを入れる箱が3×2=6個存在します。
平面的な配置でデータの箱を管理します。
表形式のデータを格納するのに便利です。


多次元配列|3次元以上も可能だが、扱いは慎重に

3次元以上の多次元配列もVBAで扱うことができます。
たとえば「月別×店舗別×商品別」のような構成で管理したいときに使います。

Dim stock(1 To 3, 1 To 2, 1 To 4) As Integer

ただし、処理が複雑になりやすく、可読性が下がるため、利用は必要最小限にとどめるのがおすすめです。

3次元配列

3次元配列は「2次元の表(行×列)」が奥行方向に層として積み重なったイメージです。
上の例では、月ごとの商品・店舗別データを sales(商品番号, 店舗番号, 月番号) の構造でまとめています。


動的配列|データ量に応じて配列のサイズを変える

動的配列は、後からサイズを自由に変更できる柔軟な配列です。
データ件数が毎回異なるときや、途中で拡張が必要なときに活躍します。

Dim arr() As String
ReDim arr(1 To 5)

さらに Preserve キーワードを使えば、既存の内容を保持したまま配列を拡張できます。

ReDim Preserve arr(1 To 10)

補足:配列の開始番号は0?1?

配列の開始番号0からか範囲指定するか

VBAでは、配列のインデックス(番号)は基本的に「0」から始まります
しかし、次のように書き方を工夫することで「1から始まる配列」を使うこともできます。

● 明示的に範囲を指定する方法(推奨)

Dim arr(1 To 3) As String

このように範囲を明示すると、**1から始まる配列(arr(1) ~ arr(3))**として使えます。

Option Base 1 を使う方法(注意)

Option Base 1
Dim arr(3) As String ' arr(1)~arr(3) になる

この方法でも1から始まる配列になりますが、ファイルの先頭に1回しか記述できないことや、プロジェクトが複雑になると誤動作の原因になるため、基本的にはおすすめしません。

範囲の明示を心がける

  • 範囲を指定して書く 1 To ○ の形式が一番安全でわかりやすい

  • 他の人がコードを読んだときの混乱を避けるためにも、範囲の明示を心がけましょう

2次元配列の使い方と注意点

2次元配列とは?1次元との違い

2次元配列とは、縦横の2方向にデータを持てる配列のことです。
イメージとしては「表(テーブル)形式のデータ」を1つの変数で扱えるようなものです。

Dim arr(1 To 3, 1 To 2) As String

この場合、3行2列のデータが格納されます。

列1 列2
行1 arr(1,1) arr(1,2)
行2 arr(2,1) arr(2,2)
行3 arr(3,1) arr(3,2)

1次元では「データの並び」しか表現できませんが、2次元配列では「表形式」のデータを扱えるのが大きな違いです。

2次元配列


実際のコード例と用途

たとえば、以下のように2次元配列に名前と点数を格納することができます。

Dim scores(1 To 3, 1 To 2) As Variant

scores(1, 1) = "田中"
scores(1, 2) = 80
scores(2, 1) = "鈴木"
scores(2, 2) = 90
scores(3, 1) = "佐藤"
scores(3, 2) = 75

このように複数のデータを1セットとして格納することで、Forループを使った処理や検索、出力などが非常に効率的になります


初期化と注意点

2次元配列も、明示的に範囲を指定して宣言するのが基本です。
ReDim Preserve を使うときは「右端の列(最後の次元)」しかサイズを変更できません。行数など他の部分を変更しようとするとエラーになります
また、Preserve をつけずに ReDim だけで再定義すると、以前のデータはすべて消えてしまうので注意が必要です。

ReDim Preserve arr(1 To 5, 1 To 2) ' ← これはエラーになる

→ このような場面では、配列を再構築する方法や、配列をVariant型のまま別変数に保持しておく方法が有効です。

2次元配列の再定義


表形式のデータを処理するのに便利

Excelのセル範囲を読み込んで配列に格納することで、大量データを高速に処理することが可能です。

Dim arr As Variant
arr = Range("A1:B100").Value ' 2次元配列として読み込まれる

このような セル範囲と組み合わせた活用も、2次元配列の大きな魅力の一つです。

3次元以上・動的配列・配列応用テクニック

3次元以上の配列とは?

3次元配列とは、行 × 列 × 深さ の3方向に広がるデータ構造です。たとえば「日別・品目別・店舗別の売上データ」など、複数の軸で管理する複雑な情報を扱いたいときに便利です。

Dim salesData(1 To 3, 1 To 2, 1 To 4) As Long

この場合:

  • 第1次元:日

  • 第2次元:商品

  • 第3次元:店舗

というような構造で管理できます。ただし、可読性が下がりやすいため、実務では配列に格納する前に目的を明確にしておくことが大切です。

3次元配列


動的配列の基本とReDimの使い方

動的配列とは、あとからサイズを自由に変更できる配列のことです。

Dim arr() As String
ReDim arr(1 To 3)

データが追加されるごとに ReDim Preserve を使って配列を拡張することができます。

ReDim Preserve arr(1 To 4) ' 要素を1つ増やす

ReDim Preserveは最終次元以外を変えることができません。
2次元以上の配列でサイズ変更をしたい場合は、一度別の配列に退避するなどの工夫が必要です。


配列の応用:配列同士のコピー・変換・ソートなど

■ 一括コピー

セル範囲をまるごと配列に読み込んだり、配列からセル範囲に書き戻すこともできます。

Sub 配列読み込み書き戻しtest()
Dim arr As Variant
arr = Range("A1:C5").Value ' 読み込み
Range("E1:G5").Value = arr ' 書き戻し
End Sub

上記のマクロを実行すると下図のように書き込みされます。

  1. セルA1:C5のデータを配列arrに読み込み
  2. 配列arrに読み込んだデータをセルE1:G5に書き戻し

2次元配列の読み込みと書き込み

このようにテーブルのデータを一度配列に格納することで、テーブルのデータを直接操作するよりもデータ処理を早く行うことができます。

■配列のソート

VBAには標準の配列ソート関数がありません。
そのため、バブルソート・クイックソートなどのアルゴリズムを自分で組む必要があります。

詳しくは別記事にて紹介予定です。


よくあるエラーとその対策

  • 配列の宣言ミスDim arr(3) は 0~3の「4個」、Dim arr(1 To 3) は 1~3の「3個」

  • 添字の範囲外アクセス → ループの範囲に LBound, UBound を使って安全に処理

  • データの初期化忘れReDimErase を忘れると古いデータが残ることも

▶ 配列処理でよくあるエラーと対策方法については別記事で後日紹介予定です。


最後に:配列の活用でVBAの処理効率が飛躍的にアップ

配列は一見難しく感じますが、うまく使いこなすことで処理スピードやコードの柔軟性が大幅に向上します。
特に「データをまとめて扱う」「繰り返し処理を効率化する」場面では、配列の活用が非常に効果的です。

次回以降、**配列の応用例を掘り下げた個別記事(配列検索・貼り付け・重複削除など)**もご紹介予定です。お楽しみに!

【関連記事】