Arrays i Visual Basic for Application

Arrays i Visual Basic for Application er strukturer, der typisk gemmer sæt af relaterede variabler af samme type. Array-indgange tilgås ved deres numeriske indeks.

For eksempel er der et hold på 20 personer, hvis navne skal gemmes til senere brug i VBA-kode. Man kunne simpelthen erklære 20 variabler til at holde hvert navn, som sådan:

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

Men du kan bruge en meget enklere og mere organiseret måde - gem en liste over teammedlemmers navne i en række af 20 variabler som f.eks. String:

Dim Team_Members(1 til 20) Som streng

I linjen vist ovenfor har vi erklæret et array. Lad os nu skrive en værdi til hvert af dets elementer, sådan her:

Team_Members(1) = "John Smith"

En yderligere fordel ved at gemme data i et array sammenlignet med at bruge separate variabler bliver tydelig, når det bliver nødvendigt at udføre den samme handling på hvert element i arrayet. Hvis navnene på teammedlemmerne blev gemt i 20 separate variabler, ville det tage 20 linjer kode at skrive hver gang for at udføre den samme handling på hver af dem. Men hvis navnene er gemt i et array, kan du udføre den ønskede handling med hver af dem ved hjælp af en simpel løkke.

Hvordan det virker, er vist nedenfor med et kodeeksempel, der udskriver navnene på hvert teammedlem fortløbende i kolonnecellerne. A aktivt Excel regneark.

For i = 1 til 20 celler(i,1).Værdi = Team_Members(i) Næste i

Det er klart, at arbejde med et array, der gemmer 20 navne, er meget mindre besværligt og mere nøjagtigt end at bruge 20 separate variabler. Men hvad hvis disse navne ikke er 20, men 1000? Og hvis det derudover er påkrævet at holde efternavne og patronymer adskilt?! Det er klart, at det snart bliver fuldstændig umuligt at håndtere en sådan mængde data i VBA-kode uden hjælp fra et array.

Multidimensionelle arrays i Excel Visual Basic

Visual Basic-arrays diskuteret ovenfor betragtes som endimensionelle. Det betyder, at de gemmer en simpel liste over navne. Arrays kan dog have flere dimensioner. For eksempel kan et todimensionelt array sammenlignes med et gitter af værdier.

Lad os sige, at du vil gemme de daglige salgstal for januar for 5 forskellige hold. Dette vil kræve et todimensionelt array bestående af 5 sæt metrics i 31 dage. Lad os erklære et array som dette:

Dim Jan_Sales_Figures(1 til 31, 1 til 5) som valuta

For at få adgang til array-elementer Jan_Salgstal, skal du bruge to indekser, der angiver dagen i måneden og kommandonummeret. For eksempel adressen på et element, der indeholder salgstal for 2-åh hold til 15. dag januar ville blive skrevet sådan:

Jan_Sales_Figures(15, 2)

På samme måde kan du erklære et array med 3 eller flere dimensioner – blot tilføje yderligere dimensioner til array-deklarationen og bruge yderligere indekser til at henvise til elementerne i dette array.

Erklæring af arrays i Excel Visual Basic

Tidligere i denne artikel har vi allerede set på flere eksempler på deklarering af arrays i VBA, men dette emne fortjener et nærmere kig. Som vist kan et endimensionelt array erklæres således:

Dim Team_Members(1 til 20) Som streng

En sådan erklæring fortæller VBA-kompileren, at arrayet Holdkammerater består af 20 variable, der kan tilgås ved indeks fra 1 til 20. Vi kunne dog tænke os at nummerere vores array-variable fra 0 til 19, i hvilket tilfælde arrayet skal erklæres sådan:

Dim Team_Members(0 til 19) Som streng

Faktisk starter nummereringen af ​​array-elementer som standard fra 0, og i array-erklæringen er det indledende indeks muligvis slet ikke angivet, sådan som dette:

Dim Team_Members(19) Som streng

VBA-kompileren vil behandle en sådan post som at erklære et array af 20 elementer med indeks fra 0 til 19.

De samme regler gælder, når du erklærer multidimensionelle Visual Basic-arrays. Som allerede vist i et af eksemplerne, når du erklærer et todimensionelt array, er indeksene for dets dimensioner adskilt af et komma:

Dim Jan_Sales_Figures(1 til 31, 1 til 5) som valuta

Men hvis du ikke angiver et startindeks for begge dimensioner af arrayet og erklærer det sådan:

Dim Jan_Sales_Figures(31, 5) Som valuta

så vil denne post blive behandlet som en todimensionel matrix, hvis første dimension indeholder 32 elementer med indeks fra 0 til 31, og den anden dimension af matrixen indeholder 6 elementer med indeks fra 0 til 5.

Dynamiske arrays

Alle arrays i ovenstående eksempler har et fast antal dimensioner. Men i mange tilfælde ved vi ikke på forhånd, hvilken størrelse vores array skal have. Vi kan komme ud af situationen ved at erklære en enorm række, hvis størrelse helt sikkert vil være større end nødvendigt for vores opgave. Men sådan en løsning vil kræve meget ekstra hukommelse og kan bremse programmet. Der er en bedre løsning. Vi kan bruge et dynamisk array - dette er et array, hvis størrelse kan indstilles og ændres et vilkårligt antal gange under udførelsen af ​​en makro.

Et dynamisk array erklæres med tomme parenteser, som dette:

Dim Team_Members() Som streng

Dernæst skal du erklære dimensionen af ​​arrayet under kodeudførelse ved hjælp af udtrykket ReDim:

ReDim Team_Members(1 til 20)

Og hvis du under udførelsen af ​​koden skal ændre størrelsen på arrayet igen, så kan du bruge ReDim-udtrykket igen:

Hvis Team_Size > 20 Så ReDim Team_Members(1 To Team_Size) End If

Husk, at ændring af størrelsen på et dynamisk array på denne måde vil resultere i tab af alle værdier gemt i arrayet. For at gemme data allerede i arrayet, skal du bruge nøgleordet Bevarsom vist nedenfor:

Hvis Team_Size > 20 Så ReDim Bevar Team_Members(1 To Team_Size) End If

Desværre nøgleordet Bevar kan kun bruges til at ændre den øvre grænse for en matrixdimension. Den nedre grænse for et array kan ikke ændres på denne måde. Hvis arrayet har flere dimensioner, skal du bruge nøgleordet Bevar, kun den sidste dimension af arrayet kan ændres.

Giv en kommentar