VBA ReDim | Обработвайте динамични масиви, като използвате VBA ReDim Preserve

Изявление на Excel VBA ReDim

Операторът VBA Redim е подобен на оператора dim, но разликата е, че се използва за съхраняване или разпределяне на повече място за съхранение или намаляване на пространството за съхранение, което променлива или масив има със себе си, сега има два важни аспекта, използвани с оператора е 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) = "Хубав ден" Край Sub 

Динамичен масив с ReDim Statement

Но в динамичния масив това не е така, няма да решим долната и горната стойност много по-рано, а просто дефинираме името на масива и присвояваме типа данни.

 Sub ReDim_Example1 () Dim MyArray () Като низ в края Sub 

За да направим името на масива динамично, първо трябва да го декларираме с думата „Dim“, но не решаваме размера на масива много предварително. Просто назоваваме масив с празни стойности вътре в скобата (). Когато масивът не включва размер, той се третира като динамичен масив.

Затъмнете MyArray () като низ

В момента, в който споменете размера на масива в скобата, той се превръща в статичен масив. Затъмнете MyArray (1 до 5) като низ

В динамичния масив винаги променяме размера на масива, като използваме думата „ReDim“ в следващия ред на кода.

ReDim MyArray (1 до 6) като низ

Всяка стойност, съхранена в името на масива в предишните стъпки, т.е. с помощта на израза „Dim“, е нула и размерът, който декларирахме с помощта на „ReDim“, става новият размер на масива.

Примери за използване на VBA Redim Statement

Можете да изтеглите този шаблон на VBA ReDim Excel тук - VBA ReDim Excel шаблон

Пример # 1

Обърнете внимание на примера за практическо използване на оператора „ReDim“. Следвайте стъпките по-долу, за да приложите “ReDim”.

Стъпка 1: Създайте първо име на макрос.

Стъпка 2: Декларирайте името на масива като низ.

Код:

 Sub ReDim_Example1 () Dim MyArray () Като низ в края Sub 

Стъпка 3: Сега използвайте думата „Redim“ и задайте размера на масива.

Код:

 Sub ReDim_Example1 () Dim MyArray () Като низ ReDim MyArray (1 до 3) End Sub 

Стъпка 4: Така че сега името на масива "MyArray" може да съдържа до 3 стойности тук. Присвойте стойността на тези 3 масива като долната.

Код:

 Sub ReDim_Example1 () Dim MyArray () Като низ ReDim MyArray (1 до 3) MyArray (1) = "Добре дошли" MyArray (2) = "до" MyArray (3) = "VBA" End Sub 

И така, първият масив е равен на думата „Добре дошли“, вторият масив е равен на думата „до“, а третият масив е равен на думата „VBA“.

Стъпка 5: Сега съхранявайте тези стойности на масива в клетки.

Код:

 Sub ReDim_Example1 () Dim MyArray () Като низ ReDim MyArray (1 до 3) MyArray (1) = "Добре дошли" MyArray (2) = "до" MyArray (3) = "VBA" Обхват ("A1"). Value = MyArray (1) Range ("B1"). Value = MyArray (2) Range ("C1"). Value = 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.