この記事ではArray関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
Array関数の使い方と注意点
Array関数は、複数の値をまとめてVariant型の配列として返す関数です。
簡単に配列を作れる一方で、型や挙動に関する注意点も多く、正しく理解して使うことが大切です。
Array関数が返す配列は必ずVariant型の1次元配列になります。
型付き配列(例:String()
やInteger()
)には直接代入できない点にも注意が必要です。
構文
Array(要素1, 要素2, ..., 要素n)
- 要素1〜n : 配列に格納したい値。個々の型は混在可能です。
- 戻り値 : Variant 型の1次元配列(要素の添字は0から始まりますが、Option Baseの設定により変わることがあります)
使用例
配列を作成する
Sub Sample()
Dim MyArray As Variant
MyArray = Array("ABC", "あいう", "123")
Debug.Print MyArray(0)
Debug.Print MyArray(1)
Debug.Print MyArray(2)
End Sub
▶ 出力結果
ABC
あいう
123
インデックス番号を指定して値を取り出す
Sub Sample()
Dim MyArray As Variant
MyArray = Array("A", "B", "C")
Debug.Print MyArray(0)
Debug.Print MyArray(1)
Debug.Print MyArray(2)
End Sub
▶ 出力結果
A
B
C
配列の要素をループ処理する
Sub Sample()
Dim MyArray As Variant
For Each MyArray In Array("ABC", "あいう", "123")
Debug.Print MyArray
Next
End Sub
▶ 出力結果
ABC
あいう
123
⚠️注意
配列の下限(開始インデックス)は通常「0」
Array関数で作った配列は、通常は0から始まります。
ただし、モジュールの先頭にOption Base 開始インデックス番号
を書くと、下限が指定した開始インデックス番号になります。
Option Baseとは?
固定長配列
やDim
で定義する配列の下限(開始インデックス)を変更するための宣言です。
- 通常の配列作成
Sub Sample()
Dim MyArray As Variant
MyArray = Array(100, 200, 300)
Debug.Print LBound(MyArray)
Debug.Print UBound(MyArray)
End Sub
▶ 出力結果
0
2
- Option Baseを使用した配列作成
Option Base 1
Sub Sample()
Dim MyArray As Variant
MyArray = Array(100, 200, 300)
Debug.Print LBound(MyArray)
Debug.Print UBound(MyArray)
End Sub
▶ 出力結果
1
3
LBound/UBound関数とは?
LBound関数 : 配列の下限(最小インデックス)を取得する関数
UBound関数 : 配列の上限(最大インデックス)を取得する関数
型付き配列には代入できない
Sub Sample()
Dim StrArr() As String
StrArr = Array("A", "B") ' ← エラー(型の不一致)
Dim VarArr As Variant
VarArr = Array("A", "B") ' ← OK
End Sub
型付き配列に代入する場合は、要素をループで代入する必要があります
Sub Sample()
Dim StrArr() As String
Dim VarArr As Variant
Dim i As Integer
VarArr = Array("A", "B", "C")
ReDim StrArr(LBound(VarArr) To UBound(VarArr))
For i = LBound(VarArr) To UBound(VarArr)
StrArr(i) = VarArr(i)
Next i
For i = LBound(StrArr) To UBound(StrArr)
Debug.Print i & ": " & StrArr(i)
Next i
End Sub
▶ 出力結果
0: A
1: B
2: C
空の要素やデータ型の混在に注意
Sub Sample()
Dim MyArray As Variant
MyArray = Array(1, "", Null, Empty, "文字列")
Debug.Print IsEmpty(MyArray(3)) ' True
Debug.Print IsNull(MyArray(2)) ' True
Debug.Print Len(MyArray(1)) ' 0
End Sub
上限・下限のインデックスを指定して配列を作成する方法
Array関数では、配列のインデックスの下限や上限を直接指定することはできません。
もし特定の下限・上限で配列を作りたい場合は、Dim
やReDim
を使って配列を宣言し、必要な範囲を指定します。
Sub Sample()
Dim MyArray() As String
Dim i As Integer
' 配列の下限を1、上限を3に指定して宣言
ReDim MyArray(1 To 3)
' 要素に値を代入
MyArray(1) = "A"
MyArray(2) = "B"
MyArray(3) = "C"
' 確認用に出力
For i = LBound(MyArray) To UBound(MyArray)
Debug.Print i & ": " & MyArray(i)
Next i
End Sub
▶ 出力結果
1: A
2: B
3: C
このようにReDimを使うと、インデックスの範囲を自由に指定可能です。
Array関数のように一括で値を渡すことはできませんが、柔軟にインデックスを設定したい場合はこちらを利用しましょう。
関連するVBA関数
- Split関数
- Join関数
- UBound関数
- LBound関数
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方