多次元配列
【書式】 多次元配列の宣言
<静的配列(固定長配列)>
Dim myArray ( [ lower To ] upper [, [ lower To ] upper … ] ) [ As Type ]
<動的配列>
Dim myArray () [ As Type ]
【書式】 配列の要素数・次元の変更
ReDim [ Preserve ] myArray ( [ lower To ] upper [, [ lower To ] upper … ] ) [ As Type ]
【項目の説明】
- myArray ・・・ 配列の変数名
- lower ・・・ 配列の添字最小値(先頭のインデックス:省略可)
- upper ・・・ 配列の添字最大値(末尾のインデックス
- Type ・・・ 変数のデータ型 を指定(省略時は Variant(バリアント型)になります)
「 lower To 」の部分は省略可能です(省略時の配列の添字最低値は「0」、Option Base 1 を指定している場合は「1」となります)。
upper, lower To upper, upper …
のように指定できます。
【Dim ステートメントについて】
配列の添字の部分( “( )” 内の部分 )の構文は、次元に応じて以下のように指定します。
lower To upper, lower To upper, lower To upper …
最大60次元まで指定可能です
Dim ステートメントで、要素数を指定せずに宣言した場合その配列は実行時に要素数を変更することができます(動的配列)。しかしそのままでは使用できないので、ReDim ステートメントを使って、要素数・次元数を指定します。
【ReDim ステートメントについて】
ReDim ステートメントを使用すると動的配列の要素数・次元数を変更することができます。
Preserve キーワードを使用すると、その配列にすでに格納されている値を失わずに要素数を変更することができます。ただしこれを使用する時は、配列の次元を変更することはできません。
多次元配列の使用例
VBAソース(その1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Option Base 1 Sub sample_array02() '配列 valArray(Variant型)、と変数 r(Variant型)の宣言 Dim valArray(), r 'valArray の次元・要素数を設定 ReDim valArray(5, 2) valArray(1, 1) = 1 valArray(2, 1) = 2 valArray(3, 1) = 3 valArray(4, 1) = 4 valArray(5, 1) = 5 valArray(1, 2) = "東 京" valArray(2, 2) = "横 浜" valArray(3, 2) = "大 阪" valArray(4, 2) = "名古屋" valArray(5, 2) = "札 幌" '配列 valArray を上記で代入した値を保持した状態で、要素数を変更 ReDim Preserve valArray(5, 3) valArray(1, 3) = "895" valArray(2, 3) = "369" valArray(3, 3) = "267" valArray(4, 3) = "226" valArray(5, 3) = "191" For r = 1 To 5 Debug.Print valArray(r, 1) & " " & valArray(r, 2) & " " & valArray(r, 3) Next r End Sub |
実行結果
VBAソース(その2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Option Base 1 Sub sample_array03() 'オブジェクト型の配列 sht の宣言 Dim sht() As Object Dim v Dim i As Long Dim shtNames As String i = 0 For Each v In Worksheets '値を保持したまま要素数を変更 ReDim Preserve sht(i + 1) Set sht(i + 1) = v i = i + 1 Next v For Each v In sht shtNames = shtNames & v.Name & Chr(13) Next v MsgBox shtNames 'メモリの解放 Erase sht End Sub |
実行結果
VBAソース(その3)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Option Base 1 Sub sample_array04() '整数型(Integer)の配列の宣言 Dim newArray() As Integer '2次元配列に設定 ReDim newArray(1, 1) newArray(1, 1) = 100 '2次元配列 newArray を3次元配列にして、要素数も変更 ReDim newArray(2, 2, 2) End Sub |