マクロ講座Array関数を使用して配列

Array関数を使用して配列を作成
Array関数を使用して配列

マクロ 81回

配列を理解する(2)Array関数、Ubound関数

今回は、Array関数を使って配列を作成する方法をご紹介します。
次に、配列の最大値を取得するのは、データ数を数えるという他に、Ubound関数を使って、添え字の最大値を取得するという方法があります。
また直感的に操作するには、"option base 1"を利用する方法があります。
※配列の添え字とは、格納された個々の要素を指し示す値のことです。 (サンプルファイルは、こちらから マクロ81回サンプルデータ

Array関数で配列変数に値を代入する

1.配列に値を入れるのは、面倒くさいですよね。
Array数を使用すると、配列変数に各要素の値を一度に入れることができます。
Array関数は、引数に指定した要素を配列にして返す関数です。


Array関数を使用して配列2

2. Array関数はバリアント型の値を返すため、配列変数を宣言するときは、データ型をバリアントにする必要があります。
ポイント1. :データ型をバリアント
ポイント2. :配列変数の下限値は常に0
Array関数を使ったサンプルを紹介します。シートに配列のデータを表示させます。
strset = Array("マ", "ト", "リ", "ッ", "ス")
ここでは、バリアント型の配列変数「strset」にArray関数で作成した配列を代入し、配列変数「strset」に代入された配列の値をシートの「A1:E1」に表示しています。

Sub makearray()
    Dim strset As Variant
    strset = Array("マ", "ト", "リ", "ッ", "ス")
    Range("A1:E1").Value = strset
End Sub

実行すると、シートの「A1:E1」に"マ", "ト", "リ", "ッ", "ス"と配列データが入ります。
Array関数を使用して配列1

Ubound関数で添え字の最大値を取得

3. もう一つの例です。こちらは、要素数がわからないと仮定して、 数えるのも面倒だという場合に、Ubound関数で添え字の最大値を取得するという例です。
まず、バリアント型の変数を宣言します。
データ型を指定しない場合は、バリアント型で宣言したのと同じ意味です。
Long型の変数iを宣言、支店名を配列変数にして、各要素に代入します。
配列変数の要素の数だけ繰り返します。添え字の最大値を取得するために、Ubound関数を使っています。 Array関数を使いますので、添え字(インデックス)の最小値は0になります。

Sub 支店array()
    Dim 支店名
    Dim i As Long
    支店名 = Array("埼玉支店", "千葉支店", "小山支店", "前橋支店", "熊谷支店")
    For i = 0 To UBound(支店名)
        Cells(3, i + 1).Value = 支店名(i)
    Next
End Sub

Array関数Ubound関数で添え字の最大値を取得

Option Base 1を使って添え字の最小値を1にする

4.Array関数を使うと、添え字(インデックス)の最小値は0になります。
ですが、それではコードが直感的でないことが多いので、常に1になるように設定しておくと便利です。
下のコードは、上記の支店名を配列にするプロシージャを"option base 1"を利用して書き換えたプロシージャです。 添え字の最小値を1にするには、すべてのプロシージャの前に"option base 1"を記述します。

Option Base 1
Sub 支店array2()
    Dim 支店名, i As Integer
    支店名 = Array("埼玉支店", "千葉支店", "小山支店", "前橋支店", "熊谷支店")
    For i = 1 To UBound(支店名)
        Cells(5, i).Value = 支店名(i)
    Next
End Sub

実行してみると、結果は同じですが、ローカルウィンドウで途中経過を見た場合に、添え字の最小値が1になるので、変数の開始番号も1になります。


Array関数を使用して配列4