VBA ReDim | Håndter dynamiske arrays ved bruk av VBA ReDim Preserve

Excel VBA ReDim-uttalelse

VBA Redim- setningen ligner på den svake setningen, men forskjellen er at den brukes til å lagre eller tildele mer lagringsplass eller redusere lagringsplassen en variabel eller en matrise har med seg. Nå er det to viktige aspekter som brukes med setningen er Bevar hvis bevar brukes med denne setningen, oppretter den en ny matrise med forskjellig størrelse, og hvis ikke bevar brukes med denne setningen, endrer den bare matrisestørrelsen til den nåværende variabelen.

Arrays er en viktig del av VBA-kodingen. Ved hjelp av matriser kan vi lagre mer enn én verdi i samme variabel vi definerte. Som hvordan vi deklarerer variabelen ved å bruke ordet "Dim", må vi også deklarere matrisenavnet ved å bruke "Dim" også.

For å erklære matrisenavnet, må vi først identifisere typen matrise vi skal definere. I matriser har vi 5 typer.

  1. Statisk matrise
  2. Dynamic Array
  3. One Dimensional Array
  4. To dimensjonal matrise
  5. Flerdimensjonalt array

I den statiske matrisen i excel vil vi bestemme den nedre verdien og den øvre verdien av matrisen i god tid mens vi erklærer variabelen. Se for eksempel på eksemplet nedenfor.

Kode:

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

Her er MyArray navnet på matrisen som kan holde verdien fra 1 til 5. MyArray kan ha 5 forskjellige resultater i den som den nedenfor.

Kode:

 Sub ReDim_Example1 () Dim MyArray (1 til 5) Som streng MyArray (1) = "Hei" MyArray (2) = "Bra" MyArray (3) = "Morning" MyArray (4) = "Ha en" MyArray (5) = "Fin dag" Slutt Sub 

Dynamic Array with ReDim Statement

Men i Dynamic array er dette ikke tilfelle, vi bestemmer ikke den laveste verdien og den øvre verdien i god tid, i stedet for vi bare definerer arraynavnet og tilordner datatype.

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

For å gjøre matrisenavnet dynamisk, må vi først erklære det med ordet "Dimm", men ikke bestemme størrelsen på matrisen i god tid. Vi navngir bare en matrise med tomme verdier i parentesen (). Når matrisen ikke inkluderer størrelse, blir den behandlet som en dynamisk matrise.

Dim MyArray () Som streng

I det øyeblikket du nevner størrelsen på matrisen i parentesen, blir den en statisk matrise. Dim MyArray (1 til 5) Som streng

I den dynamiske matrisen endrer vi alltid størrelsen på matrisen ved å bruke ordet "ReDim" i neste linje i koden.

ReDim MyArray (1 til 6) som streng

Enhver verdi som er lagret i matrisenavnet i de forrige trinnene, dvs. ved å bruke "Dim" -utsagnet, står null, og størrelsen vi erklærte med "ReDim" blir den nye størrelsen på matrisen.

Eksempler på bruk av VBA Redim Statement

Du kan laste ned denne VBA ReDim Excel-malen her - VBA ReDim Excel-mal

Eksempel 1

Se på eksemplet med å bruke “ReDim” -uttalelsen praktisk talt. Følg trinnene nedenfor for å bruke “ReDim”.

Trinn 1: Opprett et makronavn først.

Trinn 2: Erklær et matrisenavn som en streng.

Kode:

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

Trinn 3: Bruk nå ordet “Redim” og tildel størrelsen på matrisen.

Kode:

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

Trinn 4: Så nå kan arraynavnet “MyArray” inneholde opptil 3 verdier her. Tilordne verdien til disse 3 matriser som den nedenfor.

Kode:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 To 3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" End Sub 

Så den første matrisen er lik ordet "Velkommen", den andre matrisen er lik ordet "til", og den tredje matrisen er lik ordet "VBA".

Trinn 5: Lagre nå matriseverdiene 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"). Verdi = MyArray (1) Range ("B1"). Verdi = MyArray (2) Range ("C1"). Value = MyArray (3) End Sub 

Trinn 6: Hvis du kjører denne koden, bør vi ha disse verdiene i henholdsvis A1, B1 og C1-celle.

Eksempel 2 - Endre størrelse på matrisestørrelse mens du husker de gamle verdiene.

Når matrisenavnet er tildelt verdier, kan vi også endre størrelsen når som helst i prosedyren ved å bruke ordet "ReDim Preserve".

Anta at du allerede har deklarert et matrisenavn og tilordnet verdier til det matrisenavnet som det nedenfor.

Nå vil du øke matriselengden med 2, dvs. 5. I dette tilfellet kan vi bruke ordet VBA "ReDim Preserve" for å endre størrelse på matriselengden for å huske de gamle verdiene også.

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.