目次
はじめに
VBAで配列を使う際、Dimで宣言してから、myList(0) = ..., myList(1) = ... のように、一行ずつ要素を代入していくのが基本です。しかし、あらかじめ中に入れるデータが決まっている場合、この方法は少し冗長に感じられますよね。
そんなときに非常に便利なのが Array() 関数です。この関数を使えば、まるで買い物リストを作るかのように、一行で手軽に配列を作成することができます。
この記事では、Array関数を使って配列をスマートに作成し、その内容をループで処理する基本的な方法を解説します。
Array関数を使ったサンプルコード
このマクロは、Array関数で4つの曜日の名前を持つ配列を作成し、その内容をB2セルから横方向に順番に書き出します。
完成コード
' Array関数で配列を作成する
Sub CreateArrayWithFunction()
'--- 1. Array関数で配列を作成 ---
Dim weekDays As Variant
weekDays = Array("月", "火", "水", "木", "金")
'--- 2. ループで配列の値をセルに書き出す ---
Dim i As Long
' LBound/UBoundを使うと、要素数が増減してもコードの修正が不要
For i = LBound(weekDays) To UBound(weekDays)
' B2セルを基準に、Offsetで列を右にずらしながら書き込み
Worksheets("Sheet1").Range("B2").Offset(0, i).Value = weekDays(i)
Next i
MsgBox "曜日のリストをセルに書き出しました。"
End Sub
コードの解説
1. Array関数による配列作成
weekDays = Array("月", "火", "水", "木", "金")
これが Array関数の最も基本的な使い方です。
Dim weekDays As Variant:Array関数が返すのはVariant型の配列なので、格納する変数はVariant型で宣言します。Array(...): カッコの中に、カンマ区切りで配列に入れたい値を好きなだけ並べます。文字列、数値、日付などを混在させることも可能です。Array関数で作成した配列のインデックス番号は、デフォルトでは0から始まります。この例では、weekDays(0)に “月” が、weekDays(1)に “火” が…というように格納されます。
2. LBound / UBound との組み合わせ
Array関数で作った配列も、通常の配列と同様に LBound と UBound を使ってループ処理するのが定石です。
LBound(weekDays)は0を返します。UBound(weekDays)は4を返します(要素が5つのため)。
これにより、Array関数の中の要素数を後から変更しても、Forループのコードは一切修正する必要がなく、非常にメンテナンス性が高くなります。
まとめ
今回は、Array関数を使って手軽に配列を作成する方法を解説しました。
- あらかじめ中身が決まっている少量のデータを扱うなら、
Array関数が非常に便利。 Array関数で作成した配列を格納する変数はVariant型で宣言する。- 作成した配列は、
LBound/UBoundと組み合わせて安全にループ処理できる。
Dimで宣言する方法とこのArray関数を使い分けることで、VBAでのデータ処理がより効率的になります。ぜひ、状況に応じて最適な方法を選んでみてください。
