VBA動的配列の使用Redim RedimPreserve

投稿者: | 2020年10月5日
excelアイコン

Excelバージョン

マイクロソフト365

 

今回は配列のデータ数が分からない時など、配列の宣言後に配列数の変更ができる動的配列について解説したいと思います。

それではいってみましょう(^O^)

 

動的配列

概要

動的配列(可変長配列)とは配列の宣言時に配列のサイズを指定しないで、実行中に配列のサイズを増減できる配列のことです。ですのでデータ数が分からないデータを格納する時など、配列の増減ができるので、そのような時に有効に機能します。

 

動的配列の宣言

動的配列を使用する時はまず配列の宣言を最初に行います。

構文

Dim 配列() as データ型

基本はこの書き方ですが複数の書き方が存在します。

 

配列の括弧の中を空白。

 

もしくはVariant型で括弧がいらない書き方などがあります。

 

とりあえず最初は自分の一番書きやすい方法で練習してみてください。

これで動的に値を配列に格納する準備は整ったので、早速次からRedimステートメントを使用して、配列に値を格納してどのような動作になるかを確認していきたいと思います。

 

Redimステートメント

Redim概要

・配列数を変更すると要素が削除されます。

 

サンプル

RedimForで繰り返し処理するごとに配列数を変更すると要素が削除されます。

 

End Subにブレークポイントを設定しデバッグした例

redim画像

配列ary()を動的配列で宣言をした後、For文で配列aryの配列数をRedimステートメントを使用して変更して、ウオッチウィンドウで確認してみると、ary(0)~ary(4)は繰り返し処理が行われるたびに、ReDim ary(i)で配列数を変更してるので要素が削除され0になっているのが確認できます。

 

ary(5)だけ次の繰り返し処理はされずForを抜け、配列数の変更はないので要素が維持されて5が残っているのが確認できます。

ですので配列数が変更された時のみ要素が削除されます。

 

これでRedimは動的な配列数の変更はできても、配列数を変更した時点で要素は削除されるということが分かったと思います。

ですので要素を削除して配列数のみを変更する時や、配列数はキープして要素のみを削除したい時などに使えそうです(*^^)v

 

ということでRedim単体で使用することは、実践ではほぼないです。

こういった説明の時によく使用されるだけであって、実践ではほぼ使いません。

 

ですので!!

より実践的なものは次のPreserveキーワードを付け足します!

配列を使用してデータ数がわからない膨大なデータを格納したいのに、要素削除されては配列を使用している意味がありません。

ですので次に解説するPreserveキーワードを使用することで配列の要素が削除されず維持してくれるので、実践ではほぼReDim Preserveを使用します。

 

Preserveキーワード

Preserve概要

・RedimにPreserveキーワードを付ける → ReDim Preserve

・配列数を変更しても要素を維持します。

 

サンプル

Redim PreserveForで繰り返し処理するごとに配列数を変更しても要素を保持してくれます。

 

End Subにブレークポイントを設定しデバッグした例

redimPreserve画像

Redimとは違い、繰り返し処理が行われるたびに、ReDim Preserve ary(i)で配列数を変更しても要素保持しているのがわかります。

ですので実際の場面での動的配列の操作は、このReDim Preserveを使用して、データを格納していくことがほとんどですので、こちらの動作をしっかり覚えておかなければいけません。

というか言語によってはこれが普通ですよね~(*^^)v

 

まとめ

ということで、ここまでがVBAの動的配列の基本操作です。

実際にどのような時に使用するかの基本は下記の(配列追加配列削除配列コピー)などの記事で実際に動的配列を使用して実行しているので参考にしてみてください!

もっと実践的な動的配列の使用は下記の記事になります。

重複しない乱数作成と指定範囲をランダム表示(Rnd)

Webスクレイピング

以上です。