【VBA中級への道】動的配列(ReDim)完全攻略!データの増減に柔軟なコードを書く技術

【業務効率化】VBA
スポンサーリンク

  • 「今日の処理データは何件だろう……。念のため多めに1万件分くらい枠を確保しておけば大丈夫かな?」 
  • 「あ、ReDimを使ったら、今まで入れてたデータが全部消えちゃった!どうして!?」

実務の現場でVBAを教えていると、必ずと言っていいほどぶつかる壁の1つが「配列のサイズ変更」です。

私も初心者の頃、せっかく数分かけて計算した数万件のデータを、たった1行のReDimで失ってしまったことがあります。

今日は、こうしたミスを未然に防ぎ、データを安全に保持したままサイズを変更する「ReDim Preserve」の正しい運用法を解説します。 

【業務効率化】VBAの記事を見る 

1. なぜ「動的配列」が必要なのか?

プログラミングには、大量のデータを効率よく管理するための「仕切り付きの収納ボックス」のような仕組み、すなわち「配列」が存在します。

通常、配列のサイズを「10個分」と最初に定義すると、後から変更することはできません。これを「静的配列」と呼びます。
しかし、実際の業務では扱うデータ量が日によって大きく変動するため、固定されたサイズでは対応が難しくなります。

最大値を想定して過剰な領域を確保すると、メモリを不必要に消費し、システムの動作を遅延させる原因になります。

そこで、実行時に必要な分だけサイズを最適化できる「動的配列(ReDim)」が真価を発揮します。

2. ReDimは「初期化」、Preserveは「拡張」

ここが今回、最も重要なポイントになります。

  • ReDim:領域をゼロから再定義します。既存のデータはすべて破棄されます。 
  • ReDim Preserve:現在のデータを維持したまま、サイズのみを変更します。 

既存のデータを保持したまま要素数を増やしたい場合は、必ず「Preserve」を併記しなければなりません。
この使い分けが、データの消失を防ぐ鍵となります。

3. 実践!コピペで使える動的配列コード

例えば、件数の不明な「売上リスト」から、特定の条件に合うものだけを抽出して格納する例を見てみましょう。

Sub DynamicArrayExample()
    ' 変数の宣言
    Dim salesData() As String ' 括弧の中を空にすると「動的配列」になります
    Dim count As Long
    Dim i As Long
   
    count = 0
   
    ' 例として1から100までループ処理を行います 
    For i = 1 To 100

        ' データの数に合わせて配列を1つずつ増やす
        ' Preserveがないと、i=2の時にi=1のデータが消えてしまいます
        ReDim Preserve salesData(count)
       
        ' 配列にデータを格納
        salesData(count) = "データ " & i
       
        ' カウントを増やす
        count = count + 1
    Next i
   
    ' 結果を確認

    For i = 0 To UBound(salesData)
        Debug.Print salesData(i)
    Next i
End Sub

4. ReDim Preserveの制約と注意点

非常に便利なReDim Preserveですが、一つだけ制約があります。
それは「多次元配列の場合、変更できるのは最後の次元のみ」というルールです。 

例えば、2次元配列(行と列)の場合、列方向(最後の方)は増やせますが、行方向を増やすことはできません

これを解決するには、一度「行と列を逆」にして格納し、最後に転置(入れ替え)するなどのテクニックを使いますが、まずは1次元配列の操作を確実にマスターすることが上達の近道となります。 

5. 配列を使うとどれくらい速くなる?

セルに1つずつ値を書き込む処理と、配列にまとめてから一気に書き込む処理では、速度が全く違います。
10倍変わることも珍しくありません。

このスピード感こそがVBAによる自動化の醍醐味です。ぜひ取り入れてみてください!

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました