VBA ReDim | Обработка динамических массивов с помощью VBA ReDim Preserve

Заявление Excel VBA ReDim

Оператор VBA Redim аналогичен оператору dim, но разница в том, что он используется для хранения или выделения большего объема памяти или уменьшения пространства хранения, которое имеет переменная или массив с ним, теперь с оператором используются два важных аспекта: Preserve, если preserve используется с этим оператором, он создает новый массив с другим размером, а если preserve не используется с этим оператором, он просто изменяет размер массива текущей переменной.

Массивы - важная часть кодирования VBA. Используя массивы, мы можем хранить более одного значения в той же переменной, которую мы определили. Подобно тому, как мы объявляем переменную с помощью слова «Dim», аналогично нам нужно объявить имя массива с помощью «Dim».

Чтобы объявить имя массива, нам нужно сначала определить тип массива, который мы собираемся определить. В массивах у нас есть 5 типов.

  1. Статический массив
  2. Динамический массив
  3. Одномерный массив
  4. Двумерный массив
  5. Многомерный массив

В статическом массиве в excel мы заранее определим нижнее и верхнее значение массива при объявлении переменной. Например, посмотрите на пример ниже.

Код:

 Sub ReDim_Example1 () Dim MyArray (от 1 до 5) как конец строки Sub 

Здесь MyArray - это имя массива, который может содержать значение от 1 до 5. MyArray может содержать 5 различных результатов, как показано ниже.

Код:

 Sub ReDim_Example1 () Dim MyArray (от 1 до 5) As String MyArray (1) = "Hi" MyArray (2) = "Good" MyArray (3) = "Morning" MyArray (4) = "Есть" MyArray (5) = Конец подписки "Хороший день" 

Динамический массив с оператором ReDim

Но в динамическом массиве это не так, мы не будем заранее определять нижнее и верхнее значение, а просто определяем имя массива и назначаем тип данных.

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

Чтобы сделать имя массива динамическим, нам нужно сначала объявить его словом «Dim», но не решайте заранее размер массива. Мы просто называем массив с пустыми значениями внутри скобок (). Если массив не включает размер, он рассматривается как динамический массив.

Dim MyArray () как строка

В тот момент, когда вы указываете размер массива внутри скобок, он становится статическим массивом. Dim MyArray (от 1 до 5) как строка

В динамическом массиве мы всегда изменяем размер массива, используя слово «ReDim» в следующей строке кода.

ReDim MyArray (от 1 до 6) как строка

Любое значение, сохраненное в имени массива на предыдущих шагах, т.е. с использованием оператора «Dim», становится нулевым, а размер, который мы объявили с помощью «ReDim», становится новым размером массива.

Примеры использования оператора VBA Redim

Вы можете скачать этот шаблон VBA ReDim Excel здесь - Шаблон VBA ReDim Excel

Пример # 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 до 3) End Sub 

Шаг 4: Теперь имя массива «MyArray» может содержать до 3 значений. Присвойте значение этим трем массивам, как показано ниже.

Код:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (от 1 до 3) MyArray (1) = "Добро пожаловать" MyArray (2) = "на" MyArray (3) = "VBA" End Sub 

Итак, первый массив равен слову «Welcome», второй массив равен слову «to», а третий массив равен слову «VBA».

Шаг 5: Теперь сохраните эти значения массива в ячейках.

Код:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (от 1 до 3) MyArray (1) = "Добро пожаловать" MyArray (2) = "на" MyArray (3) = "VBA" Диапазон ("A1"). Значение = MyArray (1) Диапазон ("B1"). Значение = MyArray (2) Диапазон ("C1"). Значение = MyArray (3) End Sub 

Шаг 6: Если вы запустите этот код, мы должны иметь эти значения в ячейках A1, B1 и C1 соответственно.

Пример № 2 - Изменение размера массива с сохранением старых значений.

Как только имя массива присвоило значения, мы также можем изменить размер в любой момент в процедуре, используя слово «ReDim Preserve».

Предположим, вы уже объявили имя массива и присвоили значения этому имени массива, как показано ниже.

Теперь вы хотите увеличить длину массива на 2, т.е. 5. В этом случае мы можем использовать слово VBA «ReDim Preserve», чтобы изменить размер массива, чтобы также запомнить старые значения.

Код:

 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.