目次
はじめに
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でのデータ処理がより効率的になります。ぜひ、状況に応じて最適な方法を選んでみてください。