【VBA】動的配列の使い方 ReDim と ReDim Preserve の違いを解説

目次

はじめに

VBAで配列を Dim myArray(1 To 5) のように宣言すると、そのサイズは固定されます。しかし、プログラムを実行してみないと、配列にいくつの要素を格納する必要があるか分からない、という場面は非常に多くあります。例えば、条件に一致するデータの件数だけ、配列のサイズを確保したい場合などです。

このような場合に使うのが「動的配列」です。動的配列は、宣言時にはサイズを決めず、後から ReDim という命令でサイズを自由に変更できます。

この記事では、動的配列の基本的な使い方と、配列のサイズを変更する際に元のデータを保持したまま拡張するための、非常に重要なキーワード Preserve の使い方を解説します。


動的配列の基本的なサンプルコード

このマクロは、まず2つの要素を持つ動的配列を作成し、その後、元のデータを保持したまま、さらに2つの要素を追加して合計4つの要素を持つ配列に拡張します。

完成コード

' 動的配列のサイズを変更する
Sub DynamicArrayExample()
    
    '--- 1. サイズを指定せずに動的配列を宣言 ---
    Dim userList() As String
    
    '--- 2. ReDimで最初のサイズを決定 (2要素分) ---
    ReDim userList(1 To 2)
    userList(1) = "佐藤"
    userList(2) = "鈴木"
    
    Debug.Print "--- 最初のReDim後 ---"
    Debug.Print userList(1) ' -> 佐藤
    Debug.Print userList(2) ' -> 鈴木
    
    '--- 3. ReDim Preserveで、元の値を保持したままサイズを拡張 ---
    ReDim Preserve userList(1 To 4)
    userList(3) = "高橋"
    userList(4) = "田中"
    
    Debug.Print vbCrLf & "--- ReDim Preserve後 ---"
    Debug.Print userList(1) ' -> 佐藤 (値が保持されている)
    Debug.Print userList(2) ' -> 鈴木 (値が保持されている)
    Debug.Print userList(3) ' -> 高橋
    Debug.Print userList(4) ' -> 田中
    
    '--- 4. 最終的な配列をセルに一括で書き出す ---
    Worksheets("Sheet1").Range("B2").Resize(1, 4).Value = userList

End Sub

コードの解説

1. 動的配列の宣言

Dim userList() As String

動的配列を宣言するには、Dim で配列名を宣言する際に、カッコ () の中をにします。これにより、VBAはこの配列のサイズが後から変更されることを認識します。

2. ReDim によるサイズ決定

ReDim userList(1 To 2)

ReDim (Re-Dimensionの略) は、動的配列のサイズを実際に決定(または再定義)する命令です。この時点で、userList は2つの要素を持つ配列になります。

注意: もしこの配列に既にデータが入っている場合、Preserve を付けずに ReDim を実行すると、配列の中身は全て消去(初期化)されてしまいます

3. ReDim Preserve によるデータ保持

ReDim Preserve userList(1 To 4)

これが、動的配列を扱う上で最も重要なポイントです。

  • Preserve キーワードを ReDim の後ろに付けることで、VBAは配列の既存の値をすべて保持したまま、サイズを変更します。
  • この例では、「佐藤」「鈴木」という元の値を残したまま、サイズを4に拡張しています。Preserve がないと、この2つの値は消えてしまいます。

ReDim Preserve の制約: Preserve を使う場合、変更できるのは配列の最後の次元のサイズだけです。例えば、ReDim Preserve myArray(1 To 5, 1 To 10)ReDim Preserve myArray(1 To 5, 1 To 20) に変更することはできますが、ReDim Preserve myArray(1 To 10, 1 To 10) のように最初の次元(行数)を変更しようとするとエラーになります。


まとめ

今回は、VBAの動的配列と、ReDim / ReDim Preserve の使い方を解説しました。

  • サイズが未定の配列は、Dim 配列名() のようにカッコを空にして宣言する(動的配列)。
  • ReDim で、後から配列のサイズを決定・変更する。
  • 既存のデータを残したままサイズを変更したい場合は、必ず ReDim Preserve を使う。

動的配列を使いこなせば、処理するデータの量に応じてプログラムを柔軟に対応させることができます。特に ReDim Preserve は、実務で非常に多用される重要なテクニックですので、ぜひマスターしてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次