VBA ReDim | Spracovajte dynamické polia pomocou nástroja VBA ReDim Preserve

Vyhlásenie Excel VBA ReDim

Príkaz VBA Redim je podobný príkazu dim, ale rozdiel je v tom, že sa používa na ukladanie alebo prideľovanie väčšieho úložného priestoru alebo na zmenšenie úložného priestoru, ktorý má premenná alebo pole so sebou. Teraz sú s príkazom Zachované dva dôležité aspekty, ak sa s týmto príkazom použije preserve, vytvorí nové pole s inou veľkosťou a ak sa s týmto príkazom preserve nepoužije, zmení sa iba veľkosť poľa aktuálnej premennej.

Polia sú dôležitou súčasťou kódovania VBA. Pomocou polí môžeme uložiť viac ako jednu hodnotu do tej istej premennej, ktorú sme definovali. Rovnako ako deklarujeme premennú slovom „Dim“, musíme aj názov poľa deklarovať pomocou „Dim“.

Aby sme mohli deklarovať názov poľa, musíme najskôr identifikovať druh poľa, ktorý ideme definovať. V poliach máme 5 druhov.

  1. Statické pole
  2. Dynamické pole
  3. Jedno dimenzionálne pole
  4. Dvojrozmerné pole
  5. Viacrozmerné pole

V statickom poli v programe Excel rozhodneme o dolnej hodnote a hornej hodnote poľa v dostatočnom predstihu, zatiaľ čo deklarujeme premennú. Napríklad si pozrite nasledujúci príklad.

Kód:

 Sub ReDim_Example1 () Dim MyArray (1 až 5) ako reťazec End Sub 

Tu MyArray je názov poľa, ktoré môže obsahovať hodnotu od 1 do 5. MyArray môže obsahovať 5 rôznych výsledkov, ako je uvedený nižšie.

Kód:

 Sub ReDim_Example1 () Dim MyArray (1 až 5) ako reťazec MyArray (1) = "Ahoj" MyArray (2) = "dobrý" MyArray (3) = "ráno" MyArray (4) = "mať" MyArray (5) = "Nice Day" End Sub 

Dynamické pole s vyhlásením ReDim

Ale v dynamickom poli to tak nie je, nebudeme rozhodovať o dolnej hodnote a hornej hodnote v dostatočnom predstihu, skôr iba definujeme názov poľa a priradíme dátový typ.

 Sub ReDim_Example1 () Dim MyArray () ako reťazec End Sub 

Aby bol názov poľa dynamický, musíme ho najskôr deklarovať slovom „Dim“, ale nerozhodovať vopred o veľkosti poľa. Iba pomenujeme pole s prázdnymi hodnotami vo vnútri zátvorky (). Ak pole neobsahuje veľkosť, považuje sa za dynamické pole.

Dim MyArray () ako reťazec

V okamihu, keď spomeniete veľkosť poľa v zátvorke, stane sa z neho statické pole. Dim MyArray (1 až 5) ako reťazec

V dynamickom poli vždy zmeníme veľkosť poľa pomocou slova „ReDim“ v ďalšom riadku kódu.

ReDim MyArray (1 až 6) ako reťazec

Akákoľvek hodnota uložená k názvu poľa v predchádzajúcich krokoch, tj pomocou príkazu „Dim“, má hodnotu null a veľkosť, ktorú sme deklarovali pomocou príkazu „ReDim“, sa stane novou veľkosťou poľa.

Príklady použitia vyhlásenia VBA Redim

Túto šablónu VBA ReDim Excel si môžete stiahnuť tu - Šablóna VBA ReDim Excel

Príklad č

Zoznámte sa s príkladom praktického použitia vyhlásenia „ReDim“. Podľa pokynov uvedených nižšie použite program „ReDim“.

Krok 1: Najprv vytvorte názov makra.

Krok 2: Deklarujte názov poľa ako reťazec.

Kód:

 Sub ReDim_Example1 () Dim MyArray () ako reťazec End Sub 

Krok 3: Teraz použite slovo „Redim“ a priraďte veľkosť poľa.

Kód:

 Sub ReDim_Example1 () Dim MyArray () ako reťazec ReDim MyArray (1 až 3) End Sub 

Krok 4: Názov poľa „MyArray“ teda teraz môže obsahovať až 3 hodnoty. Priraďte hodnotu týmto 3 poliam ako nižšie.

Kód:

 Sub ReDim_Example1 () Dim MyArray () ako reťazec ReDim MyArray (1 až 3) MyArray (1) = "Vitajte" MyArray (2) = "na" MyArray (3) = "VBA" End Sub 

Takže prvé pole sa rovná slovu „Vitajte“, druhé pole sa rovná slovu „to“ a tretie pole sa rovná slovu „VBA“.

Krok 5: Teraz tieto hodnoty poľa uložte do buniek.

Kód:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 To 3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" Range ("A1"). Value = Rozsah MyArray (1) ("B1"). Hodnota = Rozsah MyArray (2) ("C1"). Hodnota = MyArray (3) Koniec Sub 

Krok 6: Ak spustíte tento kód, mali by sme mať tieto hodnoty v bunkách A1, B1 a C1.

Príklad č. 2 - Zmena veľkosti poľa pri zapamätaní starých hodnôt.

Po zadaní hodnôt názvu poľa môžeme tiež kedykoľvek zmeniť veľkosť procedúry pomocou slova „ReDim Preserve“.

Predpokladajme, že ste už deklarovali názov poľa a priradili ste tomuto názvu poľa hodnoty, ako je uvedené nižšie.

Teraz by ste chceli zvýšiť dĺžku poľa o 2, tj 5. V takom prípade môžeme na zmenu veľkosti poľa pomocou slova VBA „ReDim Preserve“ pamätať aj staré hodnoty.

Kód:

 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.