VBA ReDim | Håndter dynamiske arrays ved hjælp af VBA ReDim Preserve

Excel VBA ReDim-erklæring

VBA Redim- sætning svarer til den dæmpede sætning, men forskellen er, at den bruges til at gemme eller allokere mere lagerplads eller mindske lagerpladsen, som en variabel eller en matrix har med sig, nu er der to vigtige aspekter, der bruges med udsagn er Bevar, hvis bevar bruges med denne erklæring, opretter det en ny matrix med forskellig størrelse, og hvis bevar ikke bruges med denne erklæring, ændrer den bare matrixstørrelsen for den aktuelle variabel.

Arrays er en vigtig del af VBA-kodningen. Ved hjælp af arrays kan vi gemme mere end en værdi i den samme variabel, som vi definerede. Ligesom hvordan vi deklarerer variablen ved hjælp af ordet "Dim", skal vi også erklære arraynavnet ved også at bruge "Dim".

For at erklære arraynavnet skal vi først identificere den type array, vi skal definere. I arrays har vi 5 typer.

  1. Statisk matrix
  2. Dynamisk matrix
  3. En dimensionel matrix
  4. To-dimensionel matrix
  5. Flerdimensionelt array

I det statiske array i excel vil vi beslutte den nedre værdi og den øvre værdi af arrayet i god tid, mens vi erklærer variablen. Se f.eks. Nedenstående eksempel.

Kode:

 Sub ReDim_Example1 () Dim MyArray (1 til 5) Som streng-ende-sub 

Her er MyArray navnet på det array, der kan holde værdien fra 1 til 5. MyArray kan rumme 5 forskellige resultater i det som det nedenstående.

Kode:

 Sub ReDim_Example1 () Dim MyArray (1 til 5) Som streng MyArray (1) = "Hej" MyArray (2) = "Good" MyArray (3) = "Morning" MyArray (4) = "Have en" MyArray (5) = "Nice Day" Afslut Sub 

Dynamisk matrix med ReDim-erklæring

Men i dynamisk array er dette ikke tilfældet, vi beslutter ikke den lavere værdi og den øvre værdi i god tid, snarere definerer vi bare arraynavnet og tildeler datatype.

 Sub ReDim_Example1 () Dim MyArray () Som streng End Sub 

For at gøre arraynavnet dynamisk, skal vi først erklære det med ordet "Dim", men ikke beslutte størrelsen på arrayet i god tid. Vi navngiver bare en matrix med tomme værdier inden for parentesen (). Når arrayet ikke inkluderer størrelse, behandles det som et dynamisk array.

Dim MyArray () som streng

I det øjeblik du nævner størrelsen på arrayet inden for parentesen, bliver det et statisk array. Dim MyArray (1 til 5) Som streng

I det dynamiske array ændrer vi altid størrelsen på arrayet ved at bruge ordet "ReDim" i den næste linje i koden.

ReDim MyArray (1 til 6) som streng

Enhver værdi, der er gemt i arraynavnet i de foregående trin, dvs. ved at bruge "Dim" -sætningen, er nul, og den størrelse, vi erklærede ved hjælp af "ReDim", bliver den nye størrelse på arrayet.

Eksempler på brug af VBA Redim-erklæring

Du kan downloade denne VBA ReDim Excel-skabelon her - VBA ReDim Excel-skabelon

Eksempel nr. 1

Se eksemplet på at bruge “ReDim” -erklæringen praktisk. Følg nedenstående trin for at anvende “ReDim”.

Trin 1: Opret først et makronavn.

Trin 2: Erklær et array-navn som en streng.

Kode:

 Sub ReDim_Example1 () Dim MyArray () Som streng End Sub 

Trin 3: Brug nu ordet “Redim” og tildel arrayets størrelse.

Kode:

 Sub ReDim_Example1 () Dim MyArray () Som streng ReDim MyArray (1 til 3) End Sub 

Trin 4: Så nu kan arraynavnet “MyArray” indeholde op til 3 værdier her. Tildel værdien til disse 3 arrays som nedenstående.

Kode:

 Sub ReDim_Example1 () Dim MyArray () Som streng ReDim MyArray (1 til 3) MyArray (1) = "Velkommen" MyArray (2) = "til" MyArray (3) = "VBA" Afslut sub 

Så den første matrix er lig med ordet "Velkommen", den anden matrix er lig med ordet "til", og den tredje matrix er lig med ordet "VBA".

Trin 5: Gem nu disse matrixværdier i celler.

Kode:

 Sub ReDim_Example1 () Dim MyArray () Som streng ReDim MyArray (1 til 3) MyArray (1) = "Velkommen" MyArray (2) = "til" MyArray (3) = "VBA" Område ("A1"). Værdi = MyArray (1) Range ("B1"). Value = MyArray (2) Range ("C1"). Value = MyArray (3) End Sub 

Trin 6: Hvis du kører denne kode, skal vi have disse værdier i henholdsvis A1, B1 og C1-celle.

Eksempel 2 - Ændr størrelsen på matrixstørrelse, mens du husker de gamle værdier.

Når matrixnavnet er tildelt værdier, kan vi også ændre størrelsen på ethvert tidspunkt i proceduren ved hjælp af ordet "ReDim Preserve".

Antag, at du allerede har deklareret et array-navn og tildelt værdier til disse array-navn som det nedenstående.

Nu vil du gerne øge array-længden med 2, dvs. 5. I dette tilfælde kan vi bruge ordet VBA "ReDim Preserve" til at ændre størrelsen på array-længden for også at huske de gamle værdier.

Kode:

 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.