Excelバージョン
マイクロソフト365
今回は配列のデータ数が分からない時など、配列の宣言後に配列数の変更ができる動的配列について解説したいと思います。
それではいってみましょう(^O^)
Menu
動的配列
動的配列(可変長配列)とは配列の宣言時に配列のサイズを指定しないで、実行中に配列のサイズを増減できる配列のことです。ですのでデータ数が分からないデータを格納する時など、配列の増減ができるので、そのような時に有効に機能します。
動的配列の宣言
動的配列を使用する時はまず配列の宣言を最初に行います。
構文
Dim 配列() as データ型
基本はこの書き方ですが複数の書き方が存在します。
配列の括弧の中を空白。
1 | Dim ary() As String |
もしくはVariant型で括弧がいらない書き方などがあります。
1 | Dim ary As Variant |
とりあえず最初は自分の一番書きやすい方法で練習してみてください。
これで動的に値を配列に格納する準備は整ったので、早速次からRedimステートメントを使用して、配列に値を格納してどのような動作になるかを確認していきたいと思います。
Redimステートメント
・配列数を変更すると要素が削除されます。
サンプル
RedimはForで繰り返し処理するごとに配列数を変更すると要素が削除されます。
1 2 3 4 5 6 7 | Sub test_Redim() Dim i, ary() As Integer For i = 0 To 5 ReDim ary(i) '配列数が変更すると要素は消去されます ary(i) = i Next End Sub |
End Subにブレークポイントを設定しデバッグした例
配列ary()を動的配列で宣言をした後、For文で配列aryの配列数をRedimステートメントを使用して変更して、ウオッチウィンドウで確認してみると、ary(0)~ary(4)は繰り返し処理が行われるたびに、ReDim ary(i)で配列数を変更してるので要素が削除され0になっているのが確認できます。
ary(5)だけ次の繰り返し処理はされずForを抜け、配列数の変更はないので要素が維持されて5が残っているのが確認できます。
ですので配列数が変更された時のみ要素が削除されます。
これでRedimは動的な配列数の変更はできても、配列数を変更した時点で要素は削除されるということが分かったと思います。
ですので要素を削除して配列数のみを変更する時や、配列数はキープして要素のみを削除したい時などに使えそうです(*^^)v
ということでRedim単体で使用することは、実践ではほぼないです。
こういった説明の時によく使用されるだけであって、実践ではほぼ使いません。
ですので!!
より実践的なものは次のPreserveキーワードを付け足します!
配列を使用してデータ数がわからない膨大なデータを格納したいのに、要素が削除されては配列を使用している意味がありません。
ですので次に解説するPreserveキーワードを使用することで配列の要素が削除されず維持してくれるので、実践ではほぼReDim Preserveを使用します。
Preserveキーワード
・RedimにPreserveキーワードを付ける → ReDim Preserve
・配列数を変更しても要素を維持します。
サンプル
Redim PreserveはForで繰り返し処理するごとに配列数を変更しても要素を保持してくれます。
1 2 3 4 5 6 7 | Sub test_RedimPreserve() Dim i, ary() As Integer For i = 0 To 5 ReDim Preserve ary(i) '配列数を変更しても要素を保持します ary(i) = i Next End Sub |
End Subにブレークポイントを設定しデバッグした例
Redimとは違い、繰り返し処理が行われるたびに、ReDim Preserve ary(i)で配列数を変更しても要素を保持しているのがわかります。
ですので実際の場面での動的配列の操作は、このReDim Preserveを使用して、データを格納していくことがほとんどですので、こちらの動作をしっかり覚えておかなければいけません。
というか言語によってはこれが普通ですよね~(*^^)v
まとめ
ということで、ここまでがVBAの動的配列の基本操作です。
実際にどのような時に使用するかの基本は下記の(配列追加・配列削除・配列コピー)などの記事で実際に動的配列を使用して実行しているので参考にしてみてください!
もっと実践的な動的配列の使用は下記の記事になります。
以上です。