【VBA】動的配列で要素数を変更する方法(Redim Preserve)
今回は動的配列で要素数を変更する方法を紹介します。
要素数の変更はRedimステートメントによってできるのですが、Preserveを付けないと配列内のデータが消えてしまう点に注意が必要です。
おそらくこの記事を読んで要る方はデータを消さない方法を知りたいと思いますので、こちらの方法を紹介します。
また、後半で動的配列の基本的な使い方(宣言方法、初期化方法)についても説明します。
動的配列の要素数を変更する方法
配列内のデータを消したくない場合(Redim Preserve)
Sub DeleteData()
Dim arr() As String
ReDim arr(1)
arr(0) = "a"
arr(1) = "b"
''ReDimの後にPreserveを付ける
ReDim Preserve arr(2)
arr(2) = "c"
Debug.Print arr(0) 'a
Debug.Print arr(1) 'b
Debug.Print arr(2) 'c
End Sub
すでに配列内にデータがあっていて、データを残したまま配列の要素数を変更したい場合はReDimの後にPreserveを付ける必要があります。
このPreserveを付け忘れると配列内のデータが消えてしまいます。
いまいちピンと来なければ一度Preserveを消してコードを実行してみてください。
arr(0)とarr(1)のデータが無くなっていることが分かると思います。
配列内のデータを消す場合(Redim)
Sub DeleteData()
Dim arr() As String
ReDim arr(1)
arr(0) = "a"
arr(1) = "b"
''Preserve無し
ReDim arr(2)
arr(2) = "c"
Debug.Print arr(0) '空文字
Debug.Print arr(1) '空文字
Debug.Print arr(2) 'c
End Sub
このサンプルコードでは先ほどのコードからPreserveを消しています。
こうするとarr(0)とarr(1)に保存されていたデータが消えているのが分かると思います。
ReDim arr(1)
また、一番最初に動的配列の要素数を決める時に使うのも同じくRedimです。
動的配列を宣言する方法
Sub DeclareArr()
Dim arr() As String
ReDim arr(1)
End Sub
動的配列の宣言は上のコードのように行います。
変数宣言をする際に、変数名の後ろに()を付けます。
宣言した段階だと要素数が決まっていないため、データを代入したりしようとするとエラーとなります。
変数宣言をしたらRedimを書いて要素数を決定しましょう。
動的配列を初期化する方法
Sub EraseArr()
Dim arr() As String
ReDim arr(1)
arr(0) = "a"
arr(1) = "b"
''Eraseするとデータと要素数の両方がクリアされる
Erase arr
End Sub
動的配列を初期化したい場合はEraseステートメントを使用します。
このステートメントを使うと動的配列のデータと要素数の両方がクリアされます。
ちょうど変数宣言した直後のような状態となります。
何らかの事情で動的配列を使い回したいときにはEraseステートメントを使って初期化してみてください。