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

Indholdsfortegnelse

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 den en ny matrix med forskellig størrelse, og hvis bevar ikke bruges med denne sætning, ændrer den bare arraystø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 erklærer variablen ved hjælp af ordet "Dim", er vi også nødt til at deklarere arraynavnet ved hjælp af "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å arrayet, som kan holde værdien fra 1 til 5. MyArray kan indeholde 5 forskellige resultater i det som 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" End Sub

Dynamisk matrix med ReDim-erklæring

Men i dynamisk array er dette ikke tilfældet. Vi bestemmer ikke den laveste 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 beslutter ikke 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 hjælp af "Dim" -sætningen, står nul, og den størrelse, vi erklærede ved hjælp af "ReDim", bliver arrayets nye størrelse.

Eksempler til brug af VBA Redim-erklæring

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 størrelsen på arrayet.

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" -interval ("A1"). Værdi = MyArray (1) Range ("B1"). Værdi = 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-celler.

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

Når arraynavnet er tildelt værdier, kan vi også ændre størrelsen på ethvert tidspunkt i proceduren ved hjælp af ordet "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.

Årsagen til, at vi skal bruge ordet "bevar", fordi array skal huske de gamle arrayværdier i proceduren.

I det øjeblik du ignorerer ordet "bevar", husker det ikke gamle værdier.

Ting at huske her

  • ReDim kan kun indeholde den sidste værdi i arrayet, ikke de mange værdier. For eksempel kan vi ikke bruge denne kode "ReDim Preserve MyArray (4 til 5)". Dette vil kaste fejlen.
  • Vi kan ikke reducere statiske arrays. I det øjeblik du tildeler arrayets størrelse inden for parentesen, bliver det en statisk array.
  • Ved hjælp af ReDim kan vi ikke ændre datatypen. Arrayet kan indeholde uanset den datatype, vi har tildelt, mens deklarerer arrayet.

Interessante artikler...