Excel VBA 動的配列の活用法|ReDimやPreserveの応用例付き

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
動的配列について

「Excelでデータが増えたり減ったりするけど、そのたびにプログラムを変更するのは大変…。
 どうすれば効率よく管理できるんだろう?」

そんな疑問を持っていませんか?


増減するデータを柔軟に管理したい

動的配列の基本的な概念を理解したい

VBA初心者でも簡単に動的配列を使いこなしたい

その場合は、VBAを使用して「動的配列」を
取得すると解決しますよ!


この記事では、VBAにおける「動的配列」を使ってデータを効率的に管理する方法を詳しく解説します。

「動的配列」を使うと、増えるデータも減るデータも簡単に管理できます。
無駄なメモリを使わず、効率的なコードを書けるようになります!
データの変化に強いプログラムを作りたいなら、ぜひ覚えておきたい機能です。

使用例はすべてコピペするだけで実際に使用できるようにしていますので、初心者でもすぐに実践可能です。
気になる部分だけでもぜひご覧いただければと思います。

そもそも配列とは?という方は、そちらを解説した記事もありますので是非ご覧ください。

あわせて読みたい
VBA 配列の使い方徹底解説:宣言、初期化、動的配列・ソートもわかる基本ガイド 「ループ処理を使ってセルにデータを転記していたけれど、データが増えると動作が遅くなる…」このように困ったことはありませんか? ・複数のデータをまとめて管理する...

【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

目次

この記事で「できるようになる」こと

この記事を読むことで、以下のことができるようになります。

VBA「動的配列」の基本とよく使われる場面をご紹介

「動的配列」とは、プログラムの実行中にサイズを変更できる配列のことです。

動的配列のイメージ

通常の配列は宣言時にサイズを固定しますが、動的配列は後から自由にサイズを変更できます。
この仕組みにより、以下のような状況で柔軟に対応できるのが特徴です。

動的配列がよく使われる場面

動的配列は、以下のような場面で特に役立ちます。

VBAで動的配列が良く使用される場面
  • データの量が事前にわからない場合
    • 例えば、外部ファイルからデータを読み込む場合や、ユーザーからの入力データを処理する場合、あらかじめデータの量がわからないことがあります。
      動的配列を使うことで、読み込んだデータの量に応じて配列のサイズを動的に調整できます。
      これにより、不要なメモリ消費を避けながら、必要な分だけメモリを確保できます。
  • データの追加や削除が頻繁に行われる場合
    • 例えば、ユーザーが次々と入力するデータを処理する場合や、データが追加されたり削除されたりする場合があります。
      動的配列を使用すると、データの増減に合わせて配列のサイズを適宜調整できるため、データ管理が非常に柔軟になります。
  • 複数の異なるサイズのデータを管理する場合
    • 複数の異なるサイズのデータセットを扱う場合、各データセットに対して個別に配列のサイズを調整する必要があります。
      動的配列を使用することで、各データセットに対して最適なサイズの配列を動的に生成できるため、効率的なデータ管理が可能です。
スポンサーリンク

VBA「動的配列」の宣言方法と「ReDim」「Preserve」の使い方を解説

動的配列を宣言する際には、Dimステートメントを使用し、サイズを指定せずに宣言します。

その後、ReDimPreserveを使ってサイズを変更するのが一般的です。

スクロールできます
ステートメント役割注意ポイント
Dim動的配列を宣言する際に使用
サイズは指定せず、データ型を定義します。
サイズを指定せずに宣言するため、
この時点では配列にデータを格納できません
ReDim動的配列のサイズを指定または変更する際に使用。
サイズ変更時に既存データは消えます。
サイズ変更時にすべての既存データが失われるので、
後続の処理に注意が必要です。
ReDim Preserve動的配列のサイズを変更する際に
既存データを保持する場合に使用。
最終次元のみサイズ変更が可能。
多次元配列では柔軟に扱えない場合があります。

動的配列の宣言方法

動的配列を使えば、プログラム実行中に配列のサイズを自由に変更できます。

これにより、データの増減に柔軟に対応し、効率的なデータ管理が可能です。


動的配列の宣言方法
設定解説
  • 配列名 (必須)
    • この配列の名前を指定します。
      配列名には意味のある名前を付けると、コードの可読性が高まり、後からコードを見直すときに理解しやすくなります。
  • 型 (任意)
    • この配列がどのような種類のデータを格納するのかを指定する部分です。
      VBAでは、Long, String, Double, Variant など、さまざまなデータ型を指定することができます。

      型を指定しない場合、配列はVariant型になり、どの型でも格納できますが、非効率的になるため非推奨です。

このようにDimを使用し宣言された動的配列は、サイズが未定のままですが、事項で説明する「ReDimステートメント」を使うことでサイズを決定することができます。

宣言例 : 動的配列の宣言

Dim myArray() As Long

この時点ではサイズは未定です。

サイズを指定するためにはReDimを使用します。

ReDimステートメントを使って動的配列を再宣言する

動的配列のサイズを設定・変更する際に使うのが、ReDimステートメントです。

ReDimを使うことで、配列のサイズを新たに設定し、必要に応じて何度でもサイズを変更することができます。


ReDimステートメントを使って動的配列を再宣言
設定解説
  • ReDim (必須)
    • このステートメントは、動的配列のサイズを設定または変更するために使用されます。
      ReDimを使うことで、配列のサイズを自由に変更できます。
  • 配列名 (必須)
    • サイズを変更する対象の配列名を指定します。
      この配列名は、事前にDimステートメントで宣言された動的配列の名前と一致している必要があります。
  • 新しいサイズ (必須)
    • 配列の新しい要素数を指定します。
      この要素数は「0以上」の整数で、配列が格納できる要素の数を決定します。
      サイズが変更された後、配列は指定された数の要素を持つようになります。

ReDimステートメントの宣言例

Dim myArray() As Long

ReDim myArray(3)  '// 配列のサイズを3に設定
ReDimステートメントの宣言例

このコードでは、動的配列「myArray」のサイズを「3」に設定しています。
これにより、myArrayは「4つ」の要素を持つ配列として利用できるようになります。
※要素は「0」から開始するため、「0」「1」「2」「3」の合計「4つ」の要素を持ちます。

注意点: ReDimによるデータの消失

ここで注意が必要なのは、ReDimステートメントを使ってサイズを再設定すると、既存の配列データがすべて消去され、初期化されてしまうことです。

例えば、myArray(0)にデータを格納していても、ReDimを再度実行すると、既存のデータが失われ、新しいサイズで配列が再作成されてしまいます。

ReDimによるデータ消失のテスト
Sub ExampleReDim()
    Dim myArray() As Long

    '// 配列を初期化してサイズを5に設定
    ReDim myArray(5)
    myArray(0) = 10
    myArray(1) = 20

    '// 現在の配列の内容を確認
    Debug.Print "変更前のReDim: " & myArray(0) & ", " & myArray(1)  '// 結果: 10, 20

    '// 配列のサイズを10に変更
    ReDim myArray(10)

    '// ReDim後にデータを確認
    Debug.Print "変更後のReDim: " & myArray(0) & ", " & myArray(1)  '// 結果: 0, 0 (データが消える)
End Sub
処理結果
ReDimによるデータ消失のテスト
なぜこの結果になったか? 詳細解説
Redimでデータが消える説明詳細

このように、ReDimだけを使用すると、配列の再宣言時に既存のデータが失われるため、データを保持したままサイズを変更したい場合は、ReDim Preserveステートメントを使う必要があります。

ReDim Preserveを使ってデータを保持する

先ほど説明した通り、ReDimを使って配列のサイズを変更すると、元のデータは失われます。

しかし、Preserveキーワードを使うことで、既存のデータを保持しながら配列のサイズを変更することが可能です。


ReDim Preserveを使ってデータを保持
設定解説
  • ReDim (必須)
    • このステートメントは、動的配列のサイズを設定または変するために使用されます。
      ReDimを使うことで、配列のサイズを自由に変更できます。
  • Preserve (必須)
    • このキーワードを使用することで、サイズ変更時に既存のデータを保持することができます。
      Preserveを付けないと、サイズ変更時にデータは消去されてしまうので、データを維持したままサイズを変更したい場合には必ず使用します。
  • 配列名 (必須)
    • サイズを変更する対象の配列名を指定します。
      この配列名は、事前にDimステートメントで宣言された動的配列の名前と一致している必要があります。
  • 新しいサイズ (必須)
    • 配列の新しい要素数を指定します。
      この要素数は「0以上」の整数で、配列が格納できる要素の数を決定します。
      サイズが変更された後、配列は指定された数の要素を持つようになります。

ReDim Preserveの宣言例

Sub ExampleReDimPreserve()
    Dim myArray() As Long
    
    '// 配列を初期化してサイズを5に設定
    ReDim myArray(5)
    myArray(0) = 10
    myArray(1) = 20

    '// 現在の配列の内容を確認
    Debug.Print "Before ReDim Preserve: " & myArray(0) & ", " & myArray(1)  '// 結果: 10, 20

    '// 配列のサイズを10に拡張し、データを保持
    ReDim Preserve myArray(10)

    '// ReDim Preserve後にデータを確認
    Debug.Print "After ReDim Preserve: " & myArray(0) & ", " & myArray(1)  '// 結果: 10, 20 (データが保持される)
End Sub

処理結果

ReDim Preserveの宣言例

ReDim Preserveの詳細解説

Preserveを使用した結果詳細

このコードでは、myArrayのサイズを「10」に拡張しながら、最初に格納したデータ(myArray(0) = 10, myArray(1) = 20)を保持しています。

ReDim Preserveを使用することで、サイズ変更後もデータが保持され、Debug.Printで確認した際にも元のデータが表示されます。

VBAの動的配列の注意ポイント

動的配列を使用する際には、いくつかの注意点があります。

ReDimを使うと既存のデータは消える

ReDimのみを使うと、既存のデータは消えてしまいます

データを保持したままサイズを変更する場合は、必ずPreserveキーワードを使用してください。

Dim myArray() As Long
ReDim myArray(2)
myArray(0) = 10
myArray(1) = 20

ReDim Preserve myArray(4) '// サイズを拡張し、既存データを保持

⇒ もう一度「Preserveキーワード」の説明を見る

配列サイズが大きくなりすぎないように注意する

動的配列はサイズを自由に変更できるため、無制限に拡張するとメモリ不足を引き起こす可能性があります。

特に大量のデータを扱う場合は、適切なサイズ管理が重要です。

解決策: サイズを定期的に確認する

💡 ポイント: 必要以上に大きなサイズを設定しないように注意しましょう。

Dim myArray() As Long

ReDim myArray(1000) '// 配列を大きくしすぎない
スポンサーリンク

VBA 動的配列の実用例を徹底解説!データ管理と範囲操作のポイント

ここからは、「動的配列」の使用例を紹介します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

VBAの基礎から応用までを効率よくしっかり学習したい方には、UdemyのVBA講座もおすすめです。

特に自己学習で進める場合、ビデオや実践例があると理解が進みやすくなります。

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

使用例1: データの可変に対応する動的配列

ユーザーが入力したデータを動的配列に格納する方法を紹介します。
動的配列を使うことで、データが可変する状況に柔軟に対応しながら、データを効率的に管理することが可能です。

主な使用用途
入力データが可変する場合に対応したデータ管理が可能です。
例えば、Excelシートにユーザーが入力したデータを順次動的配列に格納し、後で一括処理を行いたい場合に非常に有効です。

コード例: データの可変に対応する動的配列

Sub AddData()
    Dim dataArray() As String
    Dim i As Long
    
    i = 0
    
    Do While Cells(i + 1, 1).Value <> ""
        ReDim Preserve dataArray(i)
        dataArray(i) = Cells(i + 1, 1).Value
        i = i + 1
    Loop
End Sub

処理結果

使用例1の結果

コードの動作概要

STEP
動的配列の宣言

Dimステートメントを使って動的配列「dataArray」を宣言します。
この時点では配列のサイズは決まっていません。

STEP
ループの初期化

変数「i」に初期値「0」を代入し、データの格納を開始する準備を行います。

STEP
Do Whileループでデータの追加

Do Whileループを使用して、セルにデータが存在する限りループを続けます。
各ループでReDim Preserveステートメントを使い、配列のサイズを動的に拡張しながらデータを格納します。

STEP
ループの終了

セルのデータが空になると、Do Whileループが終了します。
これにより、すべてのデータが動的配列に格納されます。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub AddData()
    • この行では、新しいサブルーチン「AddData」を定義しています。
      このサブルーチンは、Excelシートに入力されたデータを動的配列に格納する機能を持っています。
  2. Dim dataArray() As String
    • ここでは、動的配列「dataArray」をString型で宣言しています。
      この配列は、後でユーザーが入力したデータを格納するために使用されます。
  3. Dim i As Long
    • 変数「i」をLong型で宣言しています。
      この変数は、ループ内で配列のインデックスとして使用されます。
  4. i = 0
    • 変数「i」に初期値「0」を代入します。
      これにより、配列のインデックスが「0」から始まるように設定されます。
  5. Do While Cells(i + 1, 1).Value <> “”
    • Do Whileループを開始します。
      この条件は、セル「A1」から順次セルが空でない限り、ループを続けるという意味です。
  6. ReDim Preserve dataArray(i)
    • ReDim Preserveを使って、動的配列dataArrayのサイズを配列「i」に合わせて拡張しつつ、既存のデータを保持します。
  7. dataArray(i) = Cells(i + 1, 1).Value
    • 動的配列「dataArray」の現在のインデックス「i」に、セル「A1」から順次、セルのデータを格納します。
  8. i = i + 1
    • 変数「i」の値を「1」増やします。
      これにより、次のループで配列の次のインデックスにデータが格納されます。
  9. Loop
    • この行でDo Whileループを終了します。
      セルのデータが空になるまで、ループが続行されます。
  10. End Sub
    • サブルーチンの終了を示します。
      すべての処理が完了し、動的配列「dataArray」に入力データが格納されます。

この使用例では、動的配列を活用してユーザーが入力したデータを効率的に管理する方法を紹介しました。

ReDim Preserveを使うことで、データを保持しながら配列のサイズを動的に変更し、柔軟なデータ処理が可能になります。

使用例2: UBoundとLBoundを使用した動的配列の範囲操作

動的配列の範囲を確認するために「UBound」と「LBound」を使用する方法を紹介します。
「UBound」は配列の上限インデックスを、「LBound」は配列の下限インデックスを取得するために使用されます。

主な使用用途
動的配列の範囲を動的に確認したい場合に使用します。
具体的には、配列の最初と最後のインデックスを確認する必要があるときに便利です。
この機能を使うことで、配列の処理を行う際に、誤って範囲外のインデックスにアクセスするリスクを回避できます。

コード例

Sub CheckArrayBounds()
    Dim myArray() As Long
    ReDim myArray(5)
    
    myArray(0) = 10
    myArray(1) = 20
    myArray(2) = 30
    
    MsgBox "下限のインデックス: " & LBound(myArray) & " 上限のインデックス: " & UBound(myArray)
End Sub

処理結果

使用例2の結果

コードの動作概要

STEP
動的配列の宣言とサイズ設定

Dimステートメントで動的配列「myArray」を宣言し、ReDimステートメントで配列のサイズを設定します。

STEP
配列にデータを格納

「myArray」の各インデックスにデータを格納します。
ここでは、「myArray(0)」,「 myArray(1)」,「 myArray(2)」にそれぞれ「10」, 「20」, 「30」を格納します。

STEP
「UBound」と「LBound」で配列の範囲を取得

「LBound」と「UBound」を使用して、配列「myArray」の下限と上限のインデックスを取得し、メッセージボックスで表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub CheckArrayBounds()
    • この行では、新しいサブルーチン「CheckArrayBounds」を定義しています。
      このサブルーチンは、動的配列の範囲を確認する機能を持っています。
  2. Dim myArray() As Long
    • ここでは、動的配列「myArray」をLong型で宣言しています。
      後に、この配列のサイズをReDimで設定し、データを格納します。
  3. ReDim myArray(5)
    • ReDimステートメントを使用して、動的配列「myArray」のサイズを「6つ」の要素に設定します(インデックスは0から5まで)。
  4. myArray(0) = 10
    myArray(1) = 20
    myArray(2) = 30
    • ここでは、動的配列「myArray」の最初の3つのインデックスにデータを格納しています。
      myArray(0)には「10」、myArray(1)には「20」、myArray(2)には「30」が格納されます。
  5. MsgBox “下限のインデックス: ” & LBound(myArray) & ” 上限のインデックス: ” & UBound(myArray)
    • この行では、LBoundとUBoundを使用して動的配列「myArray」の下限インデックスと上限インデックスを取得し、それをメッセージボックスで表示します。
      通常、LBoundは「0」を、UBoundは「5」を返します。
  6. End Sub
    • この行は、サブルーチンの終了を示しています。
      ここで処理が完了し、プログラムは次のステップに進みます。

この使用例では、LBoundとUBoundを使用して動的配列の範囲を確認する方法を紹介しました。

この方法を使うことで、配列のインデックス範囲を動的に取得し、安全かつ効率的に配列のデータ処理を行うことが可能になります。

特に、配列のサイズが変更される可能性がある場合や、動的に生成された配列の処理を行う際に、範囲外のエラーを防ぐために役立ちます。

スポンサーリンク

この記事のまとめ

動的配列は、VBAプログラミングにおいて柔軟で効率的なデータ管理を実現する重要なツールです。
データの量が不確定な場合や、動的に増減するデータを扱う際に非常に有効です。

この記事では、動的配列の基本概念から、サイズ変更方法、データを保持するためのReDim Preserveの使い方、そして具体的な使用例について詳しく解説しました。
これらの知識を活用することで、より柔軟で効率的なプログラムを作成できるようになります。

ポイントのおさらい

さらに学ぶために

動的配列の基本を理解したら、次は配列を使った高度なデータ操作や、他の配列関連の技術に挑戦してみましょう。
データ管理のスキルが向上し、より複雑なシナリオにも対応できるようになります。

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「JavaScr...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次