Arrays in Visual Basic voor toepassing

Arrays in Visual Basic for Application zijn structuren die doorgaans sets gerelateerde variabelen van hetzelfde type opslaan. Array-items zijn toegankelijk via hun numerieke index.

Er is bijvoorbeeld een team van 20 mensen wiens namen moeten worden opgeslagen voor later gebruik in VBA-code. Je zou eenvoudig 20 variabelen kunnen declareren om elke naam te bevatten, zoals zo:

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

Maar u kunt een veel eenvoudigere en meer georganiseerde manier gebruiken - sla een lijst met namen van teamleden op in een reeks van 20 variabelen, zoals Draad:

Dim Team_Members (1 tot 20) als string

In de bovenstaande regel hebben we een array gedeclareerd. Laten we nu een waarde naar elk van zijn elementen schrijven, zoals deze:

Team_Members(1) = "Jan Smit"

Een bijkomend voordeel van het opslaan van gegevens in een array, vergeleken met het gebruik van afzonderlijke variabelen, wordt duidelijk wanneer het nodig wordt om op elk element van de array dezelfde actie uit te voeren. Als de namen van de teamleden in 20 afzonderlijke variabelen zouden zijn opgeslagen, zou het elke keer 20 regels code kosten om dezelfde actie op elk van hen uit te voeren. Als de namen echter in een array zijn opgeslagen, kunt u met een eenvoudige lus de gewenste actie met elk van hen uitvoeren.

Hoe het werkt, wordt hieronder gedemonstreerd met een codevoorbeeld dat de namen van elk teamlid opeenvolgend in de kolomcellen afdrukt. A actief Excel-werkblad.

Voor i = 1 tot 20 cellen (i, 1). Waarde = Team_Members (i) Volgende i

Het is duidelijk dat het werken met een array die 20 namen opslaat veel minder omslachtig en nauwkeuriger is dan het gebruik van 20 afzonderlijke variabelen. Maar wat als deze namen niet 20, maar 1000 zijn? En als het bovendien verplicht is om de achternamen en patroniemen gescheiden te houden?! Het is duidelijk dat het straks totaal onmogelijk wordt om zo'n hoeveelheid data in VBA-code te verwerken zonder de hulp van een array.

Multidimensionale matrices in Excel Visual Basic

De hierboven besproken Visual Basic-arrays worden als eendimensionaal beschouwd. Dit betekent dat ze een eenvoudige lijst met namen opslaan. Matrices kunnen echter meerdere dimensies hebben. Een tweedimensionale array kan bijvoorbeeld worden vergeleken met een raster van waarden.

Stel dat u de dagelijkse verkoopcijfers voor januari wilt opslaan voor 5 verschillende teams. Hiervoor is een tweedimensionale matrix nodig die bestaat uit 5 sets metrieken gedurende 31 dagen. Laten we een array als volgt declareren:

Dim Jan_Sales_Figures (1 tot 31, 1 tot 5) als valuta

Om toegang te krijgen tot array-elementen Jan_Sales_Cijfers, moet u twee indexen gebruiken die de dag van de maand en het opdrachtnummer aangeven. Bijvoorbeeld het adres van een element met verkoopcijfers voor: 2-oh teams voor 15 ste Januari zou als volgt worden geschreven:

Jan_Sales_Cijfers(15, 2)

Op dezelfde manier kunt u een array declareren met 3 of meer dimensies - voeg gewoon extra dimensies toe aan de arraydeclaratie en gebruik extra indices om naar de elementen van deze array te verwijzen.

Arrays declareren in Excel Visual Basic

Eerder in dit artikel hebben we al gekeken naar verschillende voorbeelden van het declareren van arrays in VBA, maar dit onderwerp verdient een nadere beschouwing. Zoals weergegeven, kan een eendimensionale array als volgt worden gedeclareerd:

Dim Team_Members (1 tot 20) als string

Een dergelijke verklaring vertelt de VBA-compiler dat de array Leden van het team bestaat uit 20 variabelen die toegankelijk zijn op indices van 1 tot 20. We kunnen echter overwegen onze arrayvariabelen te nummeren van 0 tot 19, in welk geval de array als volgt moet worden gedeclareerd:

Dim Team_Members (0 tot 19) als string

In feite begint de nummering van array-elementen standaard vanaf 0, en in de array-declaratie kan de initiële index helemaal niet worden gespecificeerd, zoals deze:

Dim Team_Members(19) als tekenreeks

De VBA-compiler behandelt zo'n invoer als het declareren van een array van 20 elementen met indices van 0 tot 19.

Dezelfde regels zijn van toepassing bij het declareren van multidimensionale Visual Basic-arrays. Zoals al is aangetoond in een van de voorbeelden, worden bij het declareren van een tweedimensionale array de indices van de afmetingen gescheiden door een komma:

Dim Jan_Sales_Figures (1 tot 31, 1 tot 5) als valuta

Als u echter geen startindex opgeeft voor beide dimensies van de array en deze als volgt declareert:

Dim Jan_Sales_Figures(31, 5) als valuta

dan wordt dit item behandeld als een tweedimensionale array, waarvan de eerste dimensie 32 elementen bevat met indices van 0 tot 31, en de tweede dimensie van de array 6 elementen bevat met indexen van 0 tot 5.

Dynamische arrays

Alle arrays in de bovenstaande voorbeelden hebben een vast aantal dimensies. In veel gevallen weten we echter niet van tevoren hoe groot onze array moet zijn. We kunnen uit de situatie komen door een enorme reeks te declareren, waarvan de omvang zeker groter zal zijn dan nodig is voor onze taak. Maar zo'n oplossing vereist veel extra geheugen en kan het programma vertragen. Er is een betere oplossing. We kunnen een dynamische array gebruiken - dit is een array waarvan de grootte een willekeurig aantal keren kan worden ingesteld en gewijzigd tijdens de uitvoering van een macro.

Een dynamische array wordt gedeclareerd met lege haakjes, zoals deze:

Dim Team_Members() als string

Vervolgens moet u de dimensie van de array declareren tijdens het uitvoeren van de code met behulp van de uitdrukking Opnieuw dimmen:

ReDim Team_Members (1 tot 20)

En als u tijdens het uitvoeren van de code de grootte van de array opnieuw moet wijzigen, kunt u de ReDim-expressie opnieuw gebruiken:

Als Team_Size > 20 Dan Dim Team_Members (1 To Team_Size) opnieuw in Als

Houd er rekening mee dat het op deze manier wijzigen van de grootte van een dynamische array resulteert in het verlies van alle waarden die in de array zijn opgeslagen. Om gegevens al in de array op te slaan, moet u het trefwoord . gebruiken Behoudenzoals hieronder aangegeven:

Als Team_Size > 20 Dan Redim Behoud Team_Members (1 To Team_Size) End If

Helaas het sleutelwoord Behouden kan alleen worden gebruikt om de bovengrens van een matrixdimensie te wijzigen. De ondergrens van een array kan op deze manier niet worden gewijzigd. Als de array meerdere dimensies heeft, gebruik dan het trefwoord Behouden, kan alleen de laatste dimensie van de array worden aangepast.

Laat een reactie achter