宣言する時点でいくつの要素の配列を用意するかわからない場合、事前に配列を用意(初期化)して後から要素数を変更します。 このような配列を動的配列と呼びます。動的配列を宣言するときは、ReDimステートメントを使用します。 要素数の変更はプログラムの中で何度を行えますが、ReDimステートメントで要素数を変更すると事前に配列に格納されていた値はすべて消えてしまします。 このように事前に格納された値を残したまま要素数だけを変更したい場合はReDimステートメントにPreserveを付けて変更します。
構文 | |
---|---|
ReDim Preserve varname ( subscripts ) As type | |
Preserve | 既存の配列のデータを保持する際に使用されるキーワード |
varname | 配列の名前 |
subscripts | 配列変数の次元 |
type | データ型 |
以下のサンプルコードでは最初にA列のセルの行数を取得して要素数を最初に設定しています。
Sub SetArray()
Dim strArray() As String
Dim lngRows As Long '配列の要素番号
Dim i As Long
lngRows = Worksheets("Sheet1").UsedRange.Rows.Count '最終行を取得
ReDim Preserve strArray(lngRows)
For i = 1 To lngRows
strArray(i - 1) = Worksheets("Sheet1").Cells(i, 1).Text
Next
For i = 0 To UBound(strArray)
Debug.Print strArray(i)
Next
End Sub
以下のサンプルコードでは都度配列の要素数を増やして1行ごとにファイルの内容を動的配列に格納しています。
Sub SetArray()
Dim strFileName As String
Dim intFileNo As Integer
Dim strData As String
Dim strArray() As String
Dim lngCount As Long '配列の要素番号
lngCount = 0
strFileName = "C:\temp\samp.txt"
intFileNo = FreeFile
Open strFileName For Input As #intFileNo
Do While Not EOF(intFileNo)
Line Input #intFileNo, strData
ReDim Preserve strArray(lngCount)
strArray(lngCount) = strData
lngCount = lngCount + 1
Loop
Close intFileNo
For i = 0 To UBound(strArray)
Debug.Print strArray(i)
Next
End Sub