VBAにはC#などのようにList がありません。
配列も要素数を指定しなければいけないし…
動的に上限するデータを扱いたいときに困りますよね。
なので、今回は配列の要素数を動的に増減するサンプルをつくってみます。
' 配列を宣言し、要素数を0で初期化 Dim arr() As String ReDim arr(0) Dim count As Long For count = 1 To 5 ' 最大要素数にデータを格納 arr(UBound(arr)) = count & "データ" ' 既存のデータ保持したまま要素数を拡張 ReDim Preserve arr(UBound(arr) + 1) Next ' 余分に拡張した要素を削除 ReDim Preserve arr(UBound(arr) - 1) Dim item As Variant Dim rowIdx As Long rowIdx = 1 For Each item In arr Cells(rowIdx, 1).Value = item rowIdx = rowIdx + 1 Next item
サンプルの説明。
Dim arr() As String
ReDim arr(0)
ReDim はすでに定義されている要素数を再定義することができます。
arr(UBound(arr)) = count & "データ"
UBound は配列の使用できる配列の要素番号の最大値を返します。
ReDim Preserve arr(UBound(arr) + 1)
先程説明したReDimは 再定義することができるものですね。
今回はReDim の後ろにPreserve をつけています。
ReDim は再定義する際に、すでに格納しているデータを消してしまいます。
今回は、毎回毎回削除されては困るのでPreserve をつけて
すでに格納されているデータをのこしたまま要素数を再定義しています。
拡張する要素数の指定のために、UBound を使って現在の配列の要素番号の最大値+1をしています。
ReDim Preserve arr(UBound(arr) - 1)
最後に、余分に拡張した要素を削っています。
このようにVBAでも動的な配列を使うことができます。