STEP 3 VBA編

2.配列の代入

配列の構造を持ったデータは、そのまま同じデータ型の動的配列に代入することができます。
たとえば、次のプロシージャを実行すると、配列変数bの2番目の要素として「3」がメッセージボックスに表示されます。

Sub test1()
    Dim a(2) As Integer
    Dim b() As Integer
    a(0) = 1
    a(1) = 3
    a(2) = 5
    b() = a()
    MsgBox b(1)
End Sub

この場合、配列変数bの要素数は事前にRedimで設定しておく必要はなく、自動的にaと同じサイズの配列になります(Redimで要素数を設定していたとしても、代入後はaと同じサイズになります)。
ただし、配列変数をそのまま代入する場合は必ず両者のデータ型を同じにする必要があり、この例でbをバリアント型にしても、aの内容を代入することはできません。

一方、配列変数ではなくバリアント型の変数にも、直接配列を代入することが可能です。
たとえば次のようなコードであれば、配列変数aのデータ型に関係なく、変数bにそのまま代入することができます。

Sub test2()
    Dim a(2) As Integer
    Dim b As Variant
    a(0) = 1
    a(1) = 3
    a(2) = 5
    b = a()
    MsgBox b(1)
End Sub

配列データを代入されたバリアント型の変数は、当然、それ以降は配列としての扱いを受けることになります。
ただし、その後のコードで配列でない値を代入し直すことも可能で、それ以降は再びスカラ変数に戻ります。

なお、test1もtest2も、配列を代入する際にはカッコを略して「b = a」のように記述することも可能です。

<1.VBAにおける配列    3.配列を操作する関数>