【ExcelVBA】配列
■配列の宣言、定義
・固定長配列
Dim 配列名(添字の上限値) As データ型名
・可変長配列
Dim 配列名() As データ型名
■初期化
・Eraseステートメントを使う方法
Erase 配列名
初期値はデータ型によって異なる。
・数値配列:0(ゼロ)
・文字列配列:長さ0(ゼロ)の文字列
・オブジェクト配列:Nothing
・バリアント配列:Empty
・Array関数を使う方法
Dim 配列名() As Variant
配列名 = Array(要素(0), 要素(1), ・・・)
■ReDimで再定義
ReDim 配列名(添字)
配列に代入されたデータを保持したまま要素数を変更する場合
ReDim Preserve 配列名(添字)
データ型の変更も可能だが、変更できるのは可変長配列の宣言時に
バリアント型で宣言した場合のみ。
■2次元配列(多次元配列)
Dim 配列名(添字の上限値, 添字の上限値, ・・・) As データ型名
次元ごとに「,」(カンマ)で区切って「()」内に並べる。
■セル範囲の値を配列の要素に一括で代入する
Sub Sample1()
Dim arr As Variant
arr = WorksheetFunction.Transpose(Range("A1:B5"))
Dim msg As String
Dim i As Integer
Dim j As Integer
For i = 1 To 5
For j = 1 To 2
msg = msg & arr(j, i) & ", "
Next j
msg = msg & vbCrLf
Next i
MsgBox msg
End Sub
配列arrの要素の値にアクセスするためのインデックス番号が
0からでなく1から始まっている。
Transpose関数により行と列が入れ替わっている。
■要素の値をセルに代入する
Sub Sample2()
Dim arr(2, 5) As Variant
Dim msg As String
Dim i As Integer
Dim j As Integer
For i = 0 To 4
For j = 0 To 1
arr(j, i) = i + 1 + 10 * j
msg = msg & arr(j, i) & ", "
Next j
msg = msg & vbCrLf
Next i
Range("A1:B5") = WorksheetFunction.Transpose(arr)
MsgBox msg
End Sub
Transpose関数を使って行と列を入れ替えて配列要素の値をセルに格納。
■UBound、LBoundで配列の要素数を取得する
配列の要素数を取得するには以下の式で計算し取得する。
要素数 = UBound関数の戻り値 - LBound関数の戻り値 + 1
■Forループで操作する方法
Dim i As Integer
For i = LBound(arr) To UBound(arr)
'arr(i)を使った処理
Next i
■For Eachで操作する方法
Dim Var As Variant
For Each Var In arr
'Varを使った処理
Next Var