VBA ReDim | VBA ReDimPreserveを使用して動的配列を処理する

Excel VBAReDimステートメント

VBA Redimステートメントはdimステートメントに似ていますが、違いは、より多くのストレージスペースを格納または割り当てるため、または変数または配列が持つストレージスペースを減らすために使用されることです。現在、ステートメントで使用される2つの重要な側面がPreserveです。このステートメントでpreserveを使用すると、サイズの異なる新しい配列が作成され、preserveをこのステートメントで使用しないと、現在の変数の配列サイズが変更されるだけです。

配列はVBAコーディングの重要な部分です。配列を使用すると、定義した同じ変数に複数の値を格納できます。「Dim」という単語を使用して変数を宣言する方法と同様に、「Dim」も使用して配列名を宣言する必要があります。

配列名を宣言するには、最初に定義する配列の種類を特定する必要があります。配列には5つのタイプがあります。

  1. 静的配列
  2. 動的配列
  3. 一次元配列
  4. 二次元配列
  5. 多次元配列

Excelの静的配列では、変数を宣言する際に、配列の下限値と上限値を事前に決定します。たとえば、以下の例を見てください。

コード:

 Sub ReDim_Example1()Dim MyArray(1 To 5)As String End Sub 

ここで、MyArrayは、1から5までの値を保持できる配列の名前です。MyArrayは、以下のように5つの異なる結果を保持できます。

コード:

 Sub ReDim_Example1()Dim MyArray(1 To 5)As String MyArray(1)= "Hi" MyArray(2)= "Good" MyArray(3)= "Morning" MyArray(4)= "Have a" MyArray(5) = "Nice Day" End Sub 

ReDimステートメントを使用した動的配列

ただし、動的配列ではそうではありません。事前に下限値と上限値を決定するのではなく、配列名を定義してデータ型を割り当てるだけです。

 Sub ReDim_Example1()Dim MyArray()As String End Sub 

配列名を動的にするには、最初に「Dim」という単語で宣言する必要がありますが、配列のサイズを事前に決定しないでください。括弧()内に空の値を含む配列に名前を付けるだけです。配列にサイズが含まれていない場合は、動的配列として扱われます。

Dim MyArray()As String

括弧内の配列のサイズについて言及すると、静的配列になります。Dim MyArray(1 to 5)As String

動的配列では、コードの次の行で「ReDim」という単語を使用して、常に配列サイズのサイズを変更します。

ReDim MyArray(1から6)As String

前の手順で配列名に格納された値、つまり「Dim」ステートメントを使用した値はnullのままであり、「ReDim」を使用して宣言したサイズが配列の新しいサイズになります。

VBARedimステートメントの使用例

このVBAReDim Excelテンプレートはここからダウンロードできます– VBA ReDimExcelテンプレート

例1

「ReDim」ステートメントを実際に使用する例を見てください。以下の手順で「ReDim」を適用してください。

ステップ1:最初にマクロ名を作成します。

ステップ2:配列名を文字列として宣言します。

コード:

 Sub ReDim_Example1()Dim MyArray()As String End Sub 

ステップ3:「Redim」という単語を使用して、配列のサイズを割り当てます。

コード:

 Sub ReDim_Example1()Dim MyArray()As String ReDim MyArray(1 To 3)End Sub 

ステップ4:これで、配列名「MyArray」はここで最大3つの値を保持できます。以下のように、これら3つの配列に値を割り当てます。

コード:

 Sub ReDim_Example1()Dim MyArray()As String ReDim MyArray(1 To 3)MyArray(1)= "Welcome" MyArray(2)= "to" MyArray(3)= "VBA" End Sub 

したがって、最初の配列は「Welcome」という単語に等しく、2番目の配列は「to」という単語に等しく、3番目の配列は「VBA」という単語に等しくなります。

ステップ5:これらの配列値をセルに格納します。

コード:

 Sub ReDim_Example1()Dim MyArray()As String ReDim MyArray(1 To 3)MyArray(1)= "Welcome" MyArray(2)= "to" MyArray(3)= "VBA" Range( "A1")。Value = MyArray(1)Range( "B1")。Value = MyArray(2)Range( "C1")。Value = MyArray(3)End Sub 

Step 6: If you run this code we should have these values in A1, B1, and C1 cell respectively.

Example #2 – Resize the Array Size While Remembering the Old Values.

Once the array name assigned values we can also resize at any point of time in the procedure by using the word “ReDim Preserve”.

Assume you have already declared an array name and assigned values to those array name like the below one.

Now you would like to increase the array length by 2 i.e. 5. In this case, we can use the word VBA “ReDim Preserve” to resize the array length to remember the old values as well.

Code:

 Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub 

Now we can assign two more values to the array.

Code:

 Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub 

Now store these values in cells.

Code:

 Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub 

Now run the macro and see what happens

So we got the new word in the D1 cell.

The reason why we need to use the word “preserve” because array should remember the old array values in the procedure.

The moment you ignore the word “preserve” it will not remember old values.

Things to Remember Here

  • ReDim can only hold the last value of the array, not the many values. For example, we cannot use this code “ReDim Preserve MyArray(4 to 5)”, this will throw the error.
  • We cannot ReDim static arrays. The moment you assign the size of the array inside the parenthesis it becomes a static array.
  • Using ReDim we cannot change the data type. The array can hold whatever the data type we have assigned while declaring the array.