Sådan ReDim Preserve 2D Array i Excel VBA (2 Easy Ways)

  • Del Dette
Hugh West

Et array er en variabel, der indeholder de samme typer data. Hvis der kun er én række eller én kolonne af data, kaldes det et endimensionelt array. Men når der er mere end én række og kolonne, kaldes det et 2D array. Vi bruger ReDim til at ændre størrelsen på et array i VBA. Derudover bruger vi også Bevar nøgleordet med nøgleordet ReDim for at bevare de gamle data intakte. Denne artikel viser dig 2 hurtige måder at " ReDim Preserve " a 2D-array Excel VBA .

Download arbejdsbog til øvelser

Makro til ReDim Bevar 2D.xlsm

2 praktiske metoder til ReDim Bevar 2D-array i Excel VBA

Dette er basisdatasættet, der er oprettet ud fra en 2D-array med tre rækker og to kolonner. Først opretter vi dette array. Derefter tilføjer vi endnu en kolonne til dette array. Vi bruger " ReDim Preserve "Vi vil desuden vise, hvad der sker, hvis vi ikke bruger dette.

Som standard kan vi kun ændre størrelsen på arrayets sidste dimension (dvs. kolonnerne eller den øvre grænse). Vi transponerer arrayet, ændrer derefter den sidste dimension og transponerer igen for at ændre størrelsen på begge dimensioner af arrayet 2D-array i Excel VBA.

1. ReDim Bevarer sidste dimension 2D-array

Vi vil først definere den 2D-array som dynamisk. Derefter kan man ved hjælp af ReDim vil vi oprette et array med tre rækker og to kolonner. Til sidst vil vi bruge ReDim erklæring igen med Bevar nøgleord for at øge den øvre grænse for det todimensionale array.

Trin:

  • Til at begynde med skal du trykke på ALT+F11 for at få vist den VBA-modul Alternativt kan du gøre dette fra vinduet Udvikler fanen → vælg Visual Basic .
  • Derefter, fra den Indsæt fanen → vælg Modul Vi skriver VBA-koden her.

  • Skriv derefter følgende kode i Modul vindue.
 Sub Redim_Preserve_2D_Array_Row() Dim Our_Array() As Variant ReDim Our_Array(1 To 3, 1 To 2) Our_Array(1, 1) = "Rachel" Our_Array(2, 1) = "Ross" Our_Array(3, 1) = "Joey" Our_Array(1, 2) = 25 Our_Array(2, 2) = 26 Our_Array(3, 2) = 25 Range("C6:D8").Value = Our_Array End Sub 

VBA-kode opdeling

  • For det første kalder vi den Underprocedure " Redim_Preserve_2D_Array_Row ".
  • Derefter erklærer vi variablen Vores_Array som et dynamisk array.
  • Dernæst definerer vi størrelsen af arrayet. Den nedre grænse er 3 , er den øvre grænse 2 , og begge starter fra 1 .
  • Derefter tildeler vi værdier til arrayet.
  • Herefter indtaster vi værdierne i C6:D8 celleområde.
  • Derefter vil vi udføre koden.
  • Så, Gem Modul og tryk på Kør .

  • Som følge heraf vil den returnere værdierne til de definerede celleområder. Vi kan se, at " Rachel " er i række 1 og kolonne 1 position, som blev defineret som ( 1,1 ) i VBA-koden.

  • Nu skal vi ændre størrelsen på arrayet.
  • Så tilføj dette til den tidligere kode og fjern den første Range.Value-erklæring . desuden, hvordan koden ser ud, som du kan se på nedenstående snapshot.
 ReDim Our_Array(1 Til 3, 1 Til 3) Our_Array(1, 3) = "Texas" Our_Array(2, 3) = "Mississippi" Our_Array(3, 3) = "Utah" Range("C6:E8").Value = Our_Array 

  • Her har vi øget den øvre grænse fra ( 1 Til 2 ) til ( 1 Til 3 ) ved 1 .
  • Derefter har vi tilføjet værdierne til arrayet.
  • Hvis vi nu udfører denne kode, vil vi se, at de tidligere værdier ikke er bevaret. De tidligere værdier returneres blanke.

  • Nu kan vi løse dette ved at tilføje Bevare nøgleord i den ReDim-erklæring .
  • Endelig vil vores fulde kode være denne.
 Option Explicit Sub Redim_Preserve_2D_Array_Row() Dim Our_Array() As Variant ReDim Our_Array(1 To 3, 1 To 2) Our_Array(1, 1) = "Rachel" Our_Array(2, 1) = "Ross" Our_Array(3, 1) = "Joey" Our_Array(1, 2) = 25 Our_Array(2, 2) = 26 Our_Array(3, 2) = 25 ReDim Preserve Our_Array(1 To 3, 1 Til 3, 1 Til 3) Our_Array(1, 3) = "Texas" Our_Array(2, 3) = "Mississippi" Our_Array(3, 3) = "Utah" Range("C6:E8").Value =Our_Array End Sub 

  • Hvis vi nu Kør denne kode, så vil resultatet se således ud. Vi vil således " ReDim Preserve " den sidste dimension af en 2D-array i Excel VBA... Nu vil den næste metode vise dig, hvordan du kan " ReDim Preserve " og ændre størrelsen på begge dimensioner af arrayet.

Læs mere: VBA til at hente unikke værdier fra kolonne til array i Excel (3 kriterier)

Lignende læsninger

  • Sådan navngives en tabel Array i Excel (med nemme trin)
  • Excel VBA til at læse CSV-fil til array (4 ideelle eksempler)
  • Sådan konverteres Range til Array i Excel VBA (3 måder)
  • Excel VBA: Fjern dubletter fra et array (2 eksempler)

2. ReDim Bevar begge dimensioner 2D Array i Excel VBA

I denne sidste metode vil vi vise dig, hvordan du ændrer størrelsen og " ReDim Preserve " den 2D-array Her vil vi bruge VBA Transponere funktion til at ændre størrelsen af arrayets nedre grænse. Hvis vi forsøger at ændre størrelsen af arrayets nedre grænse i den første metode, vil vi se " Subscript uden for området " fejl. Lad os nu uden videre se, hvordan vi kan løse dette og nå vores mål.

Trin:

  • For det første, som vist i den første metode , få frem den Modul vindue.
  • For det andet tilføjes følgende kodelinjer i den første kode.
 Our_Array = Application.Transpose(Our_Array) ReDim Preserve Our_Array(1 To 3, 1 To 4) Our_Array = Application.Transpose(Our_Array) Our_Array(4, 1) = "Monica" Our_Array(4, 2) = 26 Our_Array(4, 3) = "New Mexico" Range("C6:E9").Value = Our_Array 
  • Desuden ser koden for den endelige metode således ud.
 Option Explicit Sub ReDim_Preserve_2D_Array_Both_Dimensions() Dim Our_Array() As Variant ReDim Our_Array(1 To 3, 1 To 2) Our_Array(1, 1) = "Rachel" Our_Array(2, 1) = "Ross" Our_Array(3, 1) = "Joey" Our_Array(1, 2) = 25 Our_Array(2, 2) = 26 Our_Array(3, 2) = 25 ReDim Preserve Our_Array(1 To 3, 1 To 3) Our_Array(1, 3) = "Texas" Our_Array(2, 3) = "Mississippi" Our_Array(3, 3) = "Utah" Our_Array =Application.Transpose(Our_Array) ReDim Preserve Our_Array(1 To 3, 1 To 4) Our_Array = Application.Transpose(Our_Array) Our_Array(4, 1) = "Monica" Our_Array(4, 2) = 26 Our_Array(4, 3) = "New Mexico" Range("C6:E9").Value = Our_Array End Sub 

VBA-kode opdeling

  • For det første kalder vi den Underprocedure " ReDim_Preserve_2D_Array_Both_Dimensions ".
  • Derefter vil resten af koderne op til og med VBA Transponere funktion er den samme som i den første kode.
  • Her transponerer vi arrayet.
  • Så øger vi den øvre grænse for arrayet.
  • Derefter transponerer vi arrayet igen, og derfor vil det i sidste ende ændre den nedre grænse.
  • Dernæst indtaster vi værdierne for arrayet i den nye størrelse, mens vi bevarer de gamle data.
  • Til sidst skriver vi værdierne til celleområdet C6:E9 .
  • Derefter, som vist i den første metode , Kør denne kode.
  • Vi kan således visualisere, hvordan koden bevarer en 2D-array ved hjælp af " ReDim Preserve " og den VBA Transponere funktion.

Læs mere: VBA til at transponere array i Excel (3 metoder)

Ting at huske

  • ReDim Preserve kan ikke ændre arrayets nedre grænse. For at gøre det skal vi bruge Transponere funktion.
  • Vi kan kun bruge ReDim på dynamiske arrays.

Konklusion

Vi har vist dig to hurtige måder at " ReDim Preserve " a 2D array i Excel VBA. Hvis du har problemer med disse metoder eller har feedback til mig, er du velkommen til at kommentere nedenfor. Du kan også besøge vores hjemmeside ExcelWIKI for flere Excel-relaterede artikler. Tak for læsningen, og bliv ved med at være dygtig!

Hugh West er en meget erfaren Excel-træner og analytiker med over 10 års erfaring i branchen. Han har en bachelorgrad i regnskab og finans og en kandidatgrad i Business Administration. Hugh har en passion for undervisning og har udviklet en unik undervisningstilgang, der er nem at følge og forstå. Hans ekspertviden om Excel har hjulpet tusindvis af studerende og fagfolk verden over med at forbedre deres færdigheder og udmærke sig i deres karriere. Gennem sin blog deler Hugh sin viden med verden og tilbyder gratis Excel-tutorials og onlinetræning for at hjælpe enkeltpersoner og virksomheder med at nå deres fulde potentiale.