VBA - Arrayvariabele declareren (dimmen), maken en initialiseren

Deze tutorial laat zien hoe je arrayvariabelen declareert (dimt), creëert en initialiseert in VBA

Wat is een VBA-arrayvariabele?

Een VBA-arrayvariabele kan worden gezien als een groep variabelen, opgeslagen onder dezelfde naam en met hetzelfde gegevenstype. Een array kan tekst, getallen of objecten opslaan.

U verwijst naar een element in een array met behulp van zijn indexnummer.

U kunt een arrayvariabele op dezelfde manier declareren als elke andere variabele door het trefwoord Dim, Static, Public of Private te gebruiken.

Statische arrays

Er zijn 2 soorten arrays: statisch en dynamisch. Een statische array wordt gedeclareerd met de opgegeven grootte wanneer u de array voor het eerst declareert. Het wordt ook wel een vaste array genoemd.

1 Dim intA(4) als geheel getal

De bovenstaande array wordt gedeclareerd met behulp van de Dim-instructie op procedure- of moduleniveau, en de grootte van de array is 5 omdat we de LBound-waarde van de array niet hebben gedeclareerd.

Nee, dat is geen typfout! De arraygrootte is 5, ondanks het invoeren van 4 in de array. Dit komt omdat array-indexen automatisch bij nul beginnen.

Matrix-indexen

Array-indexen beginnen automatisch bij nul, tenzij Optie Basis 1 wordt bovenaan uw codemodule gedeclareerd.

Indien Optie Basis 1 is gedeclareerd, beginnen arrays automatisch bij 1.

Ik vind het echter problematisch om variabelen op zo'n manier te declareren. Code-recensenten zijn zich er misschien niet van bewust dat arrays beginnen bij nul of van de Option Base 1-declaratie

In plaats daarvan geef ik er de voorkeur aan om de begin- en eindposities van arrays expliciet te declareren:

1 Dim intA (2 tot 5) als geheel getal

Merk op dat wanneer u dit doet, u de array op elk nummer kunt starten (niet alleen 1 of 0).

Dynamische arrays

Een Dynamic Array-variabele is een array waarvan de grootte tijdens runtime kan worden gewijzigd. U declareert dynamische variabelen zonder een grootte.

1 Dim intA() als geheel getal

U kunt de ReDim-instructie gebruiken om de grootte van de array op te geven nadat de array is gemaakt.

1 ReDim intA(2)

U kunt het formaat van een dynamische array op elk moment wijzigen. Bij gebruik van het ReDim Statement worden echter alle bestaande waarden gewist. Gebruik . om bestaande matrixwaarden te behouden ReDim behouden in plaats daarvan.

1 ReDim behouden intA(2)

U kunt een dynamische array declareren op Procedure-, Module- of Global-niveau, maar u kunt het ReDim-statement alleen binnen een Procedure gebruiken.

Variantmatrices

Variant-arrays zijn dynamische arrays waarmee u gemakkelijker kunt werken.

1 Dim varNames()

Merk op dat u het gegevenstype (waarvan wordt aangenomen dat het een variant is) of de arraygrootte niet hoeft op te geven.

Zoals we hieronder zullen zien, kunt u variantarrays initialiseren met behulp van de Array-functie (het is niet nodig om eerst de grootte van de arrays te wijzigen)!

Module en openbare arrays declareren

Zoals hierboven getoond, kunnen arrays binnen procedures worden gedeclareerd, voor gebruik binnen die procedure:

1234 Substatisch array()'declareer de array met een LBound-waarde van 1 en een UBound-waarde van 4Dim IntA (1 tot 4) als geheel getalEinde sub

Maar ze kunnen ook op module- of globaal niveau worden gedeclareerd.

1234567 Optie expliciet'declareer de array met een LBound-waarde van 1 en een UBound-waarde van 4Dim IntA (1 tot 4) als geheel getalSubstatisch array()Einde sub

In dit voorbeeld kan de arrayvariabele overal binnen deze codemodule worden aangeroepen. In plaats daarvan kunt u een openbare array declareren die in uw VBA-project kan worden gebruikt (zie de volgende sectie).

Een openbare array declareren

U declareert een openbare statische array zoals u een openbare variabele zou declareren.

1 Openbare strNames (3) als String

Deze verklaring zou bovenaan uw module moeten staan, onder Option Explicit. Het kan dan tijdens uw VBA-project in elke module of procedure worden gebruikt.

Als u de array bovenaan de module declareert, maar met het sleutelwoord Dim, is het gebruik van die array beperkt tot die individuele module. Als u de array in een afzonderlijke module probeert te gebruiken, zou dit een fout opleveren.

Arrays initialiseren

U kunt op de volgende manier waarden toewijzen aan een statische array.

1234567891011 Substatisch array()'declareer de array met een LBound-waarde van 1 en een UBound-waarde van 4Dim IntA (1 tot 4) als geheel getal'initialiseer de array'IntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'toon het resultaat van positie 2 van de array in het directe venster'Debug.Print IntA(2)Einde sub

Als u de bovenstaande procedure uitvoert, wordt de waarde van 20 in het directe venster weergegeven.

U kunt de waarden op dezelfde manier ook toewijzen aan een Dynamic Array

12345678910111213 Sub DynamicArray()'declareer een dynamische array maar laat de afhankelijke waarden weg'Dim IntA() als geheel getal'initialiseer de array'IntA opnieuw dimmen (1 tot 4)IntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'toon het resultaat van positie 2 van de array in het directe venster'Debug.PrintIntA(2)Einde sub

Matrix-functie:

Echter, alleen met de variantarray, kunt u de array-functie gebruiken, wat misschien eenvoudiger is dan de standaardmethode.

12 'vul de array'intA() = Matrix(10, 20, 30, 40)

Array vullen met lus

U kunt ook arrays vullen door een reeks cellen in Excel te doorlopen

1234567891011121314151617 SubtestDynamicArrayFromExcel()'declareer de array'Dim strNames() As String'declareer een geheel getal om de rijen in een bereik te tellen'Dim n als geheel getal'declareer een geheel getal voor de lus'Dim ik als geheel getal'tel de rijen in een bereik'n = Bereik ("A1", Bereik ("A1"). Einde (xlOmlaag)). Rijen. Aantal'redim de array naar het aantal rijen in het bereik.ReDim strNames(n)Voor i = 0 tot nstrNames(i) = Bereik("A1").Offset(i + 1, 0)volgende i'toon de waarden in de array'MsgBox Join(strNames())Einde sub

Arrays opnieuw initialiseren

U kunt uw array in elk stadium van uw code opnieuw initialiseren, maar dan verliest u de oorspronkelijke waarde op die positie in uw array.

1234567891011121314 Substatisch array()'declareer de array met een LBound-waarde van 1 en een UBound-waarde van 4Dim IntA (1 tot 4) als geheel getal'initialiseer de array'IntA(1) = 10IntA(2) = 20IntA(3) = 30IntA(4) = 40'toon het resultaat van positie 2 van de array in het directe venster'Debug.Print IntA(2)'initialiseer de array opnieuw'intA(2)= 200Debug.Print IntA(2)Einde sub

In het bovenstaande voorbeeld behoudt de statische array alle waarden, behalve de waarde op positie 2 - die waarde verandert in 200.

ReDim gebruiken

Als u een Dynamic Array gebruikt, wordt het ReDim-statement gebruikt om de grootte van uw Array in te stellen. U kunt het ReDim-statement vervolgens in uw code gebruiken om de grootte van de array zo vaak als nodig te wijzigen. De onderstaande regel code zal de intA-array opnieuw initialiseren om een ​​grootte van 2 te hebben (onthoud: een array-index begint bij 0!)

1 ReDim intA(1) als geheel getal

Dus de code inclusief de ReDim-instructie zou er uitzien als het onderstaande voorbeeld.

1234567891011121314151617 SubtestDynamicArray()'declareer de array'Dim intA() als geheel getalReDim intA(2)'vul de array met getallen'intA(0) = 2intA(1) = 5intA(2) = 9'toon het nummer op positie 1'Debug.Print intA(1)'redim de array om de grootte te wijzigen'ReDim intA(3)intA(0) = 6intA(1) = 8'toon deze keer het nummer op positie 1'Debug.Print intA(1)Einde sub

Als u de bovenstaande procedure uitvoert, wordt de waarde 5 weergegeven in het directe venster en vervolgens wordt de waarde 8 weergegeven zodra we de grootte van de array hebben aangepast met ReDim en deze opnieuw hebben ingevuld. Omdat we IntA(2) echter niet hebben ingevuld en we Re-Dim Preserve niet hebben gebruikt, wordt de waarde op die positie in de array verwijderd en zijn zowel positie 3 als 4 in de array nul.

ReDim Preserve gebruiken

Als we ReDim Preserve gebruiken, behoudt het de oorspronkelijke waarden in de array.

1234567891011121314151617 SubtestDynamicArray()'declareer de array'Dim intA() als geheel getalReDim intA(2)'vul de array met getallen'intA(0) = 2intA(1) = 5intA(2) = 9'toon het nummer op positie 2'Debug.Print intA(2)'redim de array'ReDim intA(3)intA(0) = 6intA(1) = 8'toon het nummer weer op positie 2'Debug.Print intA(2)Einde sub

In beide berichtvensters die hierboven worden weergegeven, verschijnt het cijfer 9 terwijl de ReDim Preserve-verklaring die waarde op die positie hield.

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave