VBA ReDim - Verwerk dynamische arrays met VBA ReDim Preserve

Excel VBA ReDim-verklaring

VBA Redim- instructie is vergelijkbaar met de dim-instructie, maar het verschil is dat deze wordt gebruikt om meer opslagruimte op te slaan of toe te wijzen of om de opslagruimte van een variabele of een array te verkleinen, nu zijn er twee belangrijke aspecten die worden gebruikt met de instructie Preserve, als preservere wordt gebruikt met deze instructie, wordt een nieuwe array met een andere grootte gemaakt en als preservere niet wordt gebruikt met deze instructie, wordt alleen de arraygrootte van de huidige variabele gewijzigd.

Arrays zijn een belangrijk onderdeel van de VBA-codering. Met behulp van arrays kunnen we meer dan één waarde opslaan in dezelfde variabele die we hebben gedefinieerd. Net als hoe we de variabele declareren met het woord "Dim", moeten we de arraynaam ook declareren door ook "Dim" te gebruiken.

Om de arraynaam te declareren, moeten we eerst het soort array identificeren dat we gaan definiëren. In arrays hebben we 5 typen.

  1. Statische matrix
  2. Dynamische matrix
  3. Een dimensionale array
  4. Tweedimensionale array
  5. Multidimensionale array

In de statische array in Excel zullen we de onderste en bovenste waarde van de array ruim van tevoren bepalen terwijl we de variabele declareren. Bekijk bijvoorbeeld het onderstaande voorbeeld.

Code:

Sub ReDim_Example1 () Dim MyArray (1 tot 5) As String End Sub

Hier is MyArray de naam van de array, die de waarde van 1 tot 5 kan bevatten. MyArray kan 5 verschillende resultaten bevatten, zoals de onderstaande.

Code:

Sub ReDim_Example1 () Dim MyArray (1 tot 5) As String MyArray (1) = "Hallo" MyArray (2) = "Goed" MyArray (3) = "Morning" MyArray (4) = "Have a" MyArray (5) = "Nice Day" End Sub

Dynamic Array met ReDim-instructie

Maar in een dynamische array is dit niet het geval. We zullen de onderwaarde en bovenwaarde niet ruim van tevoren bepalen; in plaats daarvan definiëren we gewoon de arraynaam en wijzen we het gegevenstype toe.

Sub ReDim_Example1 () Dim MyArray () As String End Sub

Om de arraynaam dynamisch te maken, moeten we deze eerst declareren met het woord "Dim", maar bepaal de grootte van de array niet ruim van tevoren. We noemen gewoon een array met lege waarden tussen haakjes (). Als de array geen grootte bevat, wordt deze behandeld als een dynamische array.

Dim MyArray () As String

Op het moment dat je de grootte van de array tussen haakjes noemt, wordt het een statische array. Dim MyArray (1 tot 5) As String

In de dynamische array wijzigen we altijd de grootte van de array door het woord "ReDim" in de volgende regel van de code te gebruiken.

ReDim MyArray (1 tot 6) As String

Elke waarde die is opgeslagen in de arraynaam in de vorige stappen, dwz met behulp van de “Dim” -instructie, staat null, en de grootte die we hebben aangegeven met “ReDim” wordt de nieuwe grootte van de array.

Voorbeelden om VBA Redim Statement te gebruiken

Voorbeeld 1

Bekijk het voorbeeld van praktisch gebruik van de "ReDim" -verklaring. Volg de onderstaande stappen om "ReDim" toe te passen.

Stap 1: Maak eerst een macronaam.

Stap 2: Declareer een arraynaam als een tekenreeks.

Code:

Sub ReDim_Example1 () Dim MyArray () As String End Sub

Stap 3: Gebruik nu het woord "Redim" en wijs de grootte van de array toe.

Code:

Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 tot 3) End Sub

Stap 4: Dus nu kan de arraynaam "MyArray" hier maximaal 3 waarden bevatten. Wijs de waarde toe aan deze 3 arrays zoals hieronder.

Code:

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

De eerste array is dus gelijk aan het woord 'Welcome', de tweede array is gelijk aan het woord 'to' en de derde array is gelijk aan het woord 'VBA'.

Stap 5: Sla deze matrixwaarden nu op in cellen.

Code:

Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 tot 3) MyArray (1) = "Welkom" MyArray (2) = "bij" MyArray (3) = "VBA" Range ("A1"). Value = MyArray (1) Range ("B1"). Value = MyArray (2) Range ("C1"). Value = MyArray (3) End Sub

Stap 6: Als u deze code uitvoert, moeten deze waarden respectievelijk in A1-, B1- en C1-cellen staan.

Voorbeeld # 2 - Pas de grootte van de array-grootte aan terwijl u de oude waarden in gedachten houdt.

Zodra aan de arraynaam waarden zijn toegewezen, kunnen we het formaat op elk moment in de procedure wijzigen door het woord "ReDim Preserve" te gebruiken.

Assume you have already declared an array name and assigned values to those array name like the below one.

Now you would like to increase the array length by 2, i.e., 5. In this case, we can use the word VBA “ReDim Preserve” to resize the array length to remember the old values as well.

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 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.

De reden waarom we het woord "behouden" moeten gebruiken, is dat array de oude arraywaarden in de procedure moet onthouden.

Op het moment dat je het woord 'behouden' negeert, zal het oude waarden niet onthouden.

Dingen om hier te onthouden

  • ReDim kan alleen de laatste waarde van de array bevatten, niet de vele waarden. We kunnen bijvoorbeeld deze code "ReDim Preserve MyArray (4 tot 5)" niet gebruiken. Dit zal de fout veroorzaken.
  • We kunnen statische arrays niet opnieuw dimmen. Op het moment dat u de grootte van de array tussen haakjes toewijst, wordt het een statische array.
  • Met ReDim kunnen we het datatype niet wijzigen. De array kan elk gegevenstype bevatten dat we hebben toegewezen tijdens het declareren van de array.

Interessante artikelen...