[ VBA ] 配列の初期化 ( Dim / ReDim / ReDim Preserve )

Pocket

VBA で配列の初期化を行うサンプルスクリプトを掲載しています。詳細はサンプル内のコメントを参照ください。

スポンサーリンク

配列の初期化 Dim

    '----------------------------------------------
    ' サイズ固定で配列を作成し、値を格納する
    '----------------------------------------------
    Dim a1(3) As String
    a1(0) = "春"
    a1(1) = "夏"
    a1(2) = "秋"
    a1(3) = "冬"
    
    '----------------------------------------------
    ' Split関数を利用して配列の初期化
    '----------------------------------------------
    Dim a2() As String ' サイズ不定の配列を準備
    
    ' Split関数で作成した配列で上書き
    a2 = Split("春,夏,秋,冬", ",")

VBA では配列の初期化の場合に、配列のサイズ ( 要素数 ) を指定するのではなく、使用可能なインデックスを指定している点に注意しなければなりません。つまり、 Dim a(2) という配列の宣言は、インデックスが 0 ~ 2 の要素数 3 の配列を宣言していることになります。

Split 関数を使用した初期化方法は、スッキリした記述ができるだけというだけです。特に配列の初期化とは関係ありませんが、こんな方法でも初期化の代用となるという程度で覚えておけばよいでしょう。

配列のクリア(再初期化) ReDim

配列を再定義し、元の配列のデータはクリアするサンプルになります。

    ' 配列の初期化
    Dim a1(3) As String
    a1(0) = "春"
    a1(1) = "夏"
    a1(2) = "秋"
    a1(3) = "冬"

    ' 配列のサイズを11に変更して、元のデータをクリアする
    ReDim a1(10)

配列のサイズ変更 ReDim Preserve

配列のサイズを変更するサンプルになります。配列のサイズのみが変更され、データはクリアされません。

    ' 配列の初期化
    Dim a1(3) As String
    a1(0) = "春"
    a1(1) = "夏"
    a1(2) = "秋"
    a1(3) = "冬"

    ' 配列のサイズを11に変更する
    ' 元々格納していた、インデックス 0 ~ 3のデータはクリアされない
    ReDim Preserve a1(10)
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *