VBA 多次元配列(2次元配列)
Last updated on 5月 11, 2022
このチュートリアルでは、VBAの2次元配列と多次元配列について説明します。
多次元配列(2次元配列)
多次元配列は、複数の次元を含む配列で、通常は2次元または3次元ですが、最大32次元まで設定することができます。
2次元配列の宣言
複数の次元を持つ配列を作成するには、カンマで区切ってそれぞれの次元を定義します。
Dim intArr(2,3) as Integer
2次元配列の作成
以下のコードは、2次元配列に値を代入し、ワークシートの行と列に配列内の値を代入します。
Sub Populate2D()
'2次元配列の宣言
Dim intA(2, 3) As Integer
'変数の宣言
Dim rw As Integer
Dim col As Integer
'配列に値を入れる
intA(0, 0) = 45
intA(0, 1) = 50
intA(0, 2) = 55
intA(0, 3) = 60
intA(1, 0) = 65
intA(1, 1) = 70
intA(1, 2) = 75
intA(1, 3) = 80
intA(2, 0) = 85
intA(2, 1) = 90
intA(2, 2) = 95
intA(2, 3) = 100
'配列をループしてExcelの表にデータを入力する
For rw = 0 To 2
For col = 0 To 3
Cells(rw + 1, col + 1).Value = intA(rw, col)
Next col
Next rw
End Sub
すると、Excelのスプレッドシートには、以下のように入力されるはずです。
Excelのデータから2次元配列を生成する
以下のコードは、Excelのワークシートから2次元配列を入力し、そのデータを別のシートに入力するものです。
Sub Populate2D()
'ワークシートの宣言
Dim ws_Source As Worksheet
Dim ws_Destination As Worksheet
'配列の宣言
Dim wsData(10, 2) As Variant
'変数の宣言
Dim rw as Integer
Dim col As Integer
'参照するシートを設定する
Set ws_Source = Worksheets("Sheet1")
'シートから情報を取得し、配列に入力する
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
wsData(rw, col) = ws_Source.Range("A2").Offset(rw, col).Value
Next col
Next rw
'出力するシートを設定する
Set ws_Destination = Worksheets("Sheet2")
'配列から出力するシートに入力する
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
ws_Destination.Range("A1").Offset(rw,col).Value = wsData(rw, col)
Next col
Next rw
End Sub
ReDimとReDim Preserveによるサイズ変更
ReDimを使って配列のサイズを変更することができます。(詳しくはこちら)
Sub Resize2D()
'配列の宣言
Dim varArray() as Variant
'配列のサイズを宣言
ReDim varArray(1, 2)
varArray(0, 0) = "メル・スミス"
varArray(0, 1) = "フレッド・バックル"
varArray(0, 2) = "ジェーン・エア"
varArray(1, 0) = "会計士"
varArray(1, 1) = "秘書"
varArray(1, 2) = "医者"
'配列の大きさを再宣言する
ReDim varArray(0, 1)
'配列に再投入
varArray(0, 0) = "メル・スミス"
varArray(0, 1) = "フレッド・バックル"
End Sub
配列を再宣言すると、ReDim Preserveステートメントを使用しない限り、それまで配列に保持されていたデータは失われます。
Sub Resize2D()
'配列の宣言
Dim varArray() as Variant
'配列のサイズを宣言
ReDim varArray(1, 2)
varArray(0, 0) = "メル・スミス"
varArray(0, 1) = "フレッド・バックル"
varArray(0, 2) = "ジェーン・エア"
varArray(1, 0) = "会計士"
varArray(1, 1) = "秘書"
varArray(1, 2) = "医者"
'配列の大きさを再宣言する
ReDim Preserve varArray(1, 3)
'配列に追加の値を入れる
varArray(0, 3) = "ロブ・バーンズ"
varArray(1, 3) = "配管工"
End Sub
Re-Dim Preserveで配列の元のデータを保持したい場合は、配列の最後の次元だけサイズを変更することができます。
デバッグをクリックすると、配列の最初の次元のサイズが、宣言時から変更されてしまったことを示すエラーがハイライト表示されます。