Excel VBA 入門講座

Excel VBA Tips Excel VBA 入門講座

動的配列

宣言する時点でいくつの要素の配列を用意するかわからない場合、事前に配列を用意(初期化)して後から要素数を変更します。 このような配列を動的配列と呼びます。動的配列を宣言するときは、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
Excel VBA Tips Excel VBA 入門講座 TOP