VBA - Deklarere (Dim), opprett og initialiser matrisevariabel

Denne opplæringen vil demonstrere hvordan du deklarerer (Dim), oppretter og initialiserer matrisevariabler i VBA

Hva er en VBA Array -variabel?

En VBA -matrisvariabel kan betraktes som en gruppe variabler, lagret under samme navn og med samme datatype. En matrise kan lagre tekst, tall eller objekter.

Du refererer til et element i en matrise ved å bruke indeksnummeret.

Du kan deklarere en matrisevariabel på samme måte som du ville deklarere en annen variabel ved å bruke Dim, Statisk, Offentlig eller Privat søkeord.

Statiske matriser

Det er to typer matriser - Statisk og Dynamisk. En statisk matrise deklareres med den angitte størrelsen når du først deklarerer matrisen. Det kalles også en Fixed Array.

1 Dim intA (4) som heltall

Matrisen ovenfor deklareres ved bruk av Dim -setningen på et prosedyre- eller modulnivå, og størrelsen på matrisen er 5 ettersom vi ikke har deklarert LBound -verdien til matrisen.

Nei, det er ikke en skrivefeil! Array -størrelsen er 5, til tross for at du har angitt 4 i matrisen. Dette er fordi matrisindekser automatisk starter på null.

Arrayindekser

Arrayindekser begynner automatisk på null med mindre Alternativbase 1 er deklarert øverst i kodemodulen.

Hvis Alternativbase 1 blir deklarert, starter matriser automatisk ved 1.

Jeg synes imidlertid det er problematisk å erklære variabler på en slik måte. Kodevurderere er kanskje ikke klar over at matriser starter på null eller av Option Base 1 -erklæringen

I stedet foretrekker jeg eksplisitt å angi start- og sluttposisjonen til matriser:

1 Dim intA (2 til 5) som heltall

Legg merke til at når du gjør det, kan du starte matrisen med et hvilket som helst tall (ikke bare 1 eller 0).

Dynamiske matriser

En Dynamic Array -variabel er en matrise hvis størrelse kan endres under kjøretid. Du erklærer dynamiske variabler uten størrelse.

1 Dim intA () som heltall

Du kan bruke ReDim -setningen til å angi størrelsen på matrisen etter at matrisen er opprettet.

1 ReDim intA (2)

Du kan endre størrelsen på en dynamisk matrise når som helst. Når du bruker ReDim -erklæringen, slettes imidlertid alle eksisterende verdier. For å bevare eksisterende matrisverdier, bruk ReDim Preserve i stedet.

1 ReDim Preserve intA (2)

Du kan deklarere en dynamisk matrise på et prosedyre-, modul- eller globalt nivå, men du kan bare bruke ReDim -setningen i en prosedyre.

Variant Arrays

Variantarrayer er dynamiske matriser som er lettere å jobbe med.

1 Dim varNames ()

Legg merke til at du ikke trenger å spesifisere datatypen (det antas å være variant) eller matrisestørrelsen.

Som vi ser nedenfor, kan du initialisere variantarrayer ved hjelp av Array -funksjonen (du trenger ikke å endre størrelsen på arrays først)!

Deklarere modul og offentlige oppsett

Som vist ovenfor kan matriser deklareres innenfor prosedyrer, for bruk innenfor denne prosedyren:

1234 Sub StaticArray ()'erklærer matrisen med en LBound -verdi på 1 og en UBound -verdi på 4Dim IntA (1 til 4) som heltallSlutt Sub

Men de kan også deklareres på modul- eller globalt nivå.

1234567 Alternativ Eksplisitt'erklærer matrisen med en LBound -verdi på 1 og en UBound -verdi på 4Dim IntA (1 til 4) som heltallSub StaticArray ()Slutt Sub

I dette eksemplet kan matrisevariabelen kalles hvor som helst i denne kodemodulen. I stedet kan du deklarere en offentlig matrise som kan brukes i hele ditt VBA -prosjekt (se neste avsnitt).

Erklæring om offentlig matrise

Du erklærer en offentlig statisk matrise slik du ville erklært en offentlig variabel.

1 Offentlig strNames (3) som streng

Denne erklæringen må gå øverst i modulen, under Alternativ eksplisitt. Det kan deretter brukes i hele ditt VBA -prosjekt i en hvilken som helst modul eller prosedyre.

Hvis du erklærer matrisen øverst i modulen, men med Dim -søkeordet, er bruken av denne matrisen begrenset til den enkelte modulen. Hvis du prøver å bruke matrisen i en egen modul, vil det føre til en feil.

Initialiser matriser

Du kan tilordne verdier til en statisk matrise på følgende måte.

1234567891011 Sub StaticArray ()'erklærer matrisen med en LBound -verdi på 1 og en UBound -verdi på 4Dim IntA (1 til 4) som heltall'initialiser matrisenIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'vis resultatet av posisjon 2 i matrisen i det umiddelbare vinduetDebug.Print IntA (2)Slutt Sub

Hvis du kjører prosedyren ovenfor, vil verdien på 20 vises i det umiddelbare vinduet.

Du kan også tilordne verdiene til en dynamisk matrise på samme måte

12345678910111213 Sub DynamicArray ()'erklærer en dynamisk matrise, men utelater de begrensede verdieneDim IntA () som heltall'initialiser matrisenReDim IntA (1 til 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'vis resultatet av posisjon 2 i matrisen i det umiddelbare vinduetDebug.PrintIntA (2)Slutt Sub

Array -funksjon

Derimot, bare med variantarrayen, kan du bruke Array -funksjonen som kan være enklere enn å bruke standardmetoden.

12 'fyll ut matrisenintA () = Array (10, 20, 30, 40)

Fyll ut matrise med sløyfe

Du kan også fylle ut matriser ved å gå gjennom en rekke celler i Excel

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()'erklærer matrisenDim strNames () As String'erklærer et helt tall for å telle radene i et områdeDim n Som heltall'erklærer et heltall for løkkenDim i As Integer'teller radene i et områden = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count'rediger matrisen til mengden rader i området.ReDim strNames (n)For i = 0 Til nstrNames (i) = Range ("A1"). Offset (i + 1, 0)Neste jeg'vis verdiene i matrisenMsgBox Join (strNames ())Slutt Sub

Initialiser arrays på nytt

Du kan initialisere matrisen på nytt når som helst i koden, men du vil da miste den opprinnelige verdien som finnes i den posisjonen i matrisen.

1234567891011121314 Sub StaticArray ()'erklærer matrisen med en LBound -verdi på 1 og en UBound -verdi på 4Dim IntA (1 til 4) som heltall'initialiser matrisenIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'vis resultatet av posisjon 2 i matrisen i det umiddelbare vinduetDebug.Print IntA (2)'initialiser matrisen igjenintA (2) = 200Debug.Print IntA (2)Slutt Sub

I eksemplet ovenfor beholder den statiske matrisen alle verdiene, bortsett fra verdien i posisjon 2 - den verdien endres til 200.

Bruke ReDim

Hvis du bruker en dynamisk matrise, brukes ReDim -setningen til å angi størrelsen på matrisen. Du kan bruke ReDim -setningen senere i koden for å endre størrelsen på matrisen så mange ganger du trenger. Kodelinjen nedenfor vil initialisere intA Array på nytt for å ha en størrelse på 2 (Husk - en Array -indeks begynner på 0!)

1 ReDim intA (1) som heltall

Så koden inkludert ReDim -setningen vil se ut som eksemplet nedenfor.

1234567891011121314151617 Sub TestDynamicArray ()'erklærer matrisenDim intA () Som heltallReDim intA (2)'fyll ut matrisen med tallintA (0) = 2intA (1) = 5intA (2) = 9'vis tallet i posisjon 1Debug.Print intA (1)'Rediger matrisen for å endre størrelsenReDim intA (3)intA (0) = 6intA (1) = 8'vis tallet i posisjon 1 denne gangenDebug.Print intA (1)Slutt Sub

Hvis du kjører prosedyren ovenfor, vil verdien på 5 vises i det umiddelbare vinduet, og deretter vil verdien på 8 bli vist når vi har endret størrelsen på matrisen ved hjelp av ReDim og repopulert den. Siden vi imidlertid ikke har fylt ut IntA (2), og vi ikke brukte Re-Dim Preserve, vil verdien i den posisjonen i matrisen bli fjernet, og både posisjon 3 og 4 i matrisen vil være null.

Bruke ReDim Preserve

Hvis vi bruker ReDim Preserve, beholder det de opprinnelige verdiene i matrisen.

1234567891011121314151617 Sub TestDynamicArray ()'erklærer matrisenDim intA () Som heltallReDim intA (2)'fyll ut matrisen med tallintA (0) = 2intA (1) = 5intA (2) = 9'vis tallet i posisjon 2Debug.Print intA (2)'redimere matrisenReDim intA (3)intA (0) = 6intA (1) = 8'vis nummeret i posisjon 2 igjenDebug.Print intA (2)Slutt Sub

I begge meldingsboksene som vises ovenfor, vil tallet 9 vises da ReDim Preserve -setningen beholdt denne verdien i den posisjonen.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave