更新日:、 作成日:

VBA Array 関数:配列を作成する

はじめに

Excel VBA マクロの Array 関数から配列を作成する方法を紹介します。

Array 関数は、指定した要素で作成された配列を返します。

Array(1, 2, 3) なら (0 To 2) の要素数を持つ 1, 2, 3 の配列を返します。

動的配列を初期化したいときに使用します。

配列について詳しくは「配列」をご覧ください。
配列を並び替えするには「配列の並び替え」をご覧ください。

Array 関数の引数と戻り値

Array()
Array(, …)
を含んだ配列を作成します。

引数「値」省略できます。文字列、数値、日付など何でも指定できます。
戻り値の型Variant 型の動的配列

解説

戻り値を受け取る変数は Variant 型または Variant 型の動的配列である必要があります。それ以外の型だと「エラー 13 型が一致しません。」が発生します。

作成される配列は動的配列で、最小インデックスは 0 からスタートします。

Array(1, 2, 3) のように入力して、(0 To 2) の要素数を持つ配列を返します。

引数「値」を省略したときは、(0 To -1) の要素数 0 の配列を返します。これが要素数 0 の配列を作成する唯一の方法です。

引数「値」には Array(1, "A", True) のように、数値や文字列など異なる型を指定できます。

引数「値」に Array 関数を指定すると、ジャグ配列を作成できます。

Array 関数から二次元配列は作成できません。

配列の初期化

[{値1, 値2, …}] のように [] で囲ってエクセルに配列を入力するのと同じようにして、一次元の動的配列を代入できます。ただし最小インデックスが 1 になります。

[{値1, 値2; 値3, 値4; …}] のように ; で区切ると一次元目の要素が増えていきます。二次元の動的配列を代入できます。

使用例

Array 関数の使用例を紹介します。

簡単に配列を初期化できます。次の 2 つの配列は同じ結果になります。

Dim v As Variant
v = Array(1, 2, 3) ' (0 ~ 2) の Variant 型の配列

Dim a() As Variant
ReDim a(2) ' Dim a(2) と同じ要素数 (0 ~ 2) になる
a(0) = 1
a(1) = 2
a(2) = 3

配列を作成する

配列を作成します。

Dim v As Variant
v = Array() ' (0 ~ -1) の要素数 0 の配列
Debug.Print(LBound(v)) ' 0、最小インデックス
Debug.Print(UBound(v)) ' -1、最大インデックス

v = Array(1, 2, 3)
Debug.Print(v(0)) ' 1
Debug.Print(v(1)) ' 2
Debug.Print(v(2)) ' 3
Debug.Print(LBound(v)) ' 0、最小インデックス
Debug.Print(UBound(v)) ' 2、最大インデックス

Dim var() As Variant
var = Array("あ", 2) ' 異なる型の要素を持つ
Debug.Print(var(0)) ' "あ"
Debug.Print(var(1)) ' 2

Dim a(2) As Variant
a = Array(1, 2) ' エラー、静的配列には代入できない

Dim i() As Integer
i = Array(1, 2) ' エラー、Variant 型以外には代入できない

配列の初期化する

エクセルに配列を入力するのと同じようにして一次元配列や二次元配列を代入できます。

Dim 一次元() As Variant ' Variant 型の動的配列
一次元 = [{1, 2, 3}] ' (1 ~ 3) の Variant 型の配列
Debug.Print(一次元(1)) ' 1
Debug.Print(一次元(2)) ' 2
Debug.Print(一次元(3)) ' 3

Dim 二次元() As Variant ' Variant 型の動的配列
二次元 = [{"A1", "B1", "C1"; "A2", "B2", "C2"}] ' (1 ~ 2, 1 ~ 3) の Variant 型の配列
Debug.Print(二次元(1, 1)) ' A1
Debug.Print(二次元(1, 2)) ' B1
Debug.Print(二次元(1, 3)) ' C1
Debug.Print(二次元(2, 1)) ' A2
Debug.Print(二次元(2, 2)) ' B2
Debug.Print(二次元(2, 3)) ' C2

ジャグ配列を作成する

Array 関数の引数に Array 関数を入力して、ジャグ配列を作成できます。

Dim v As Variant
v = Array(Array(1, 11), Array(2, 22, 222)) ' (0 ~ 1) の Variant 型の配列
Debug.Print(v(0)(0)) ' 1
Debug.Print(v(0)(1)) ' 11
Debug.Print(v(1)(0)) ' 2
Debug.Print(v(1)(1)) ' 22
Debug.Print(v(1)(2)) ' 222

Debug.Print(LBound(v)) ' 0 ' 最初の Array 関数の最小インデックス
Debug.Print(UBound(v)) ' 1 ' 最初の Array 関数の最大インデックス

Debug.Print(LBound(v(0))) ' 0 ' 1 つ目の引数の Array 関数の最小インデックス
Debug.Print(UBound(v(0))) ' 1 ' 1 つ目の引数の Array 関数の最大インデックス

Debug.Print(LBound(v(1))) ' 0 ' 2 つ目の引数の Array 関数の最小インデックス
Debug.Print(UBound(v(1))) ' 2 ' 2 つ目の引数の Array 関数の最大インデックス