Hur man ReDim bevarar 2D Array i Excel VBA (2 enkla sätt)

  • Dela Detta
Hugh West

En matris är en variabel som innehåller samma typer av data. Om det bara finns en rad eller en kolumn med data kallas den för en endimensionell matris. Men när det finns mer än en rad och en kolumn kallas den för en 2D-matris. Vi använder ReDim för att ändra storleken på en array i VBA. Dessutom använder vi Bevara med nyckelordet ReDim för att behålla de gamla uppgifterna intakta. Den här artikeln visar dig hur du 2 snabba sätt att " ReDim Reservat " a 2D-matris Excel VBA .

Ladda ner övningsboken

Makro för att ReDim bevara 2D.xlsm

2 praktiska metoder för att ReDim bevara 2D-array i Excel VBA

Detta är den basdataset som skapats från en 2D-matris med tre rader och två kolumner. Först skapar vi denna matris. Sedan lägger vi till ytterligare en kolumn till denna matris. Vi använder " ReDim Reservat "Dessutom kommer vi att visa vad som händer om vi inte använder detta.

Som standard kan vi bara ändra storleken på den sista dimensionen i matrisen (dvs. kolumnerna eller den övre gränsen). Vi transponerar matrisen, ändrar den sista dimensionen och transponerar sedan igen för att ändra storleken på båda dimensionerna i 2D-matris i Excel VBA.

1. ReDim Bevara sista dimensionen 2D Array

Vi kommer först att definiera 2D-matris som dynamisk. Med hjälp av ReDim kommer vi att skapa en array med tre rader och två kolumner. Slutligen kommer vi att använda ReDim igen med Bevara nyckelord för att öka den övre gränsen för den tvådimensionella matrisen.

Steg:

  • Till att börja med trycker du på ALT+F11 för att få upp den VBA-modul Alternativt kan du göra detta från fönstret Utvecklare flik → välj Visual Basic .
  • Sedan, från den Infoga flik → välj Modul Vi skriver VBA-koden här.

  • Skriv sedan följande kod i Modul fönster.
 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 

Uppdelning av VBA-kod

  • För det första kallar vi Underförfarande " Redim_Preserve_2D_Array_Row ".
  • Därefter deklarerar vi variabeln Vår_Array som en dynamisk matris.
  • Därefter definierar vi storleken på matrisen. Den nedre gränsen är 3 är den övre gränsen 2 , och båda utgår från 1 .
  • Sedan tilldelar vi värden till matrisen.
  • Därefter matar vi in värdena i C6:D8 cellområde.
  • Därefter kör vi koden.
  • Så, Spara Modul och tryck på Kör .

  • Som ett resultat av detta kommer den att återge värdena till de definierade cellintervallen. Vi kan se att " Rachel " är i raden 1 och kolumnen 1 position, som definierades som ( 1,1 ) i VBA-koden.

  • Nu ska vi ändra storlek på matrisen.
  • Lägg till detta i den tidigare koden och ta bort den första Range.Value-angivelse . Dessutom ser koden ut som du kan se i ögonblicksbilden nedan.
 ReDim Our_Array(1 To 3, 1 To 3) Our_Array(1, 3) = "Texas" Our_Array(2, 3) = "Mississippi" Our_Array(3, 3) = "Utah" Range("C6:E8").Value = Our_Array 

  • Här har vi ökat den övre gränsen från ( 1 Till 2 ) till ( 1 Till 3 ) genom att 1 .
  • Sedan har vi lagt till värdena i matrisen.
  • Om vi nu utför den här koden kommer vi att se att de tidigare värdena inte bevaras, utan att de tidigare värdena återges som tomma.

  • Nu kan vi åtgärda detta genom att lägga till Bevara nyckelordet i den ReDim-angivelse .
  • Slutligen kommer vår fullständiga kod att se ut så här.
 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 To 3) Our_Array(1, 3) = "Texas" Our_Array(2, 3) = "Mississippi" Our_Array(3, 3) = "Utah" Range("C6:E8").Value =Our_Array End Sub 

  • Om vi nu Kör den här koden, så kommer resultatet att se ut så här. Vi kommer alltså att " ReDim Reservat " den sista dimensionen i en 2D-matris i Excel VBA... Nästa metod visar hur man " ReDim Reservat " och ändra storlek på båda dimensionerna i matrisen.

Läs mer: VBA för att hämta unika värden från kolumnen till matrisen i Excel (3 kriterier)

Liknande läsningar

  • Hur man namnger en tabellmatris i Excel (med enkla steg)
  • Excel VBA för att läsa CSV-filen till en matris (4 idealiska exempel)
  • Hur du konverterar intervall till matris i Excel VBA (3 sätt)
  • Excel VBA: Ta bort dubbletter från en matris (2 exempel)

2. ReDim bevara båda dimensionerna 2D Array i Excel VBA

I den här sista metoden visar vi hur du ändrar storlek och " ReDim Preserve " 2D-matris Här kommer vi att använda VBA Transponera för att ändra storleken på den nedre gränsen för matrisen. Om vi försöker ändra storleken på den nedre gränsen för matrisen med den första metoden, kommer vi att se " Index utanför intervallet " fel. Låt oss nu se hur vi kan åtgärda detta och nå vårt mål.

Steg:

  • För det första, enligt den första metoden , ta fram den Modul fönster.
  • För det andra lägger du till följande rader i den första koden.
 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 
  • Dessutom ser koden för den slutliga metoden ut så här.
 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 

Uppdelning av VBA-kod

  • För det första kallar vi Underförfarande " ReDim_Preserve_2D_Array_Both_Dimensions ".
  • Därefter kommer resten av koderna fram till och med VBA Transponera funktionen är densamma som i den första koden.
  • Här transponerar vi matrisen.
  • Då ökar vi den övre gränsen för matrisen.
  • Därefter transponerar vi matrisen igen, vilket i slutändan ändrar den nedre gränsen.
  • Därefter matar vi in värdena för den omskalade matrisen samtidigt som vi behåller de gamla uppgifterna.
  • Slutligen skriver vi värdena till cellintervallet C6:E9 .
  • Efter det, enligt den första metoden , Kör denna kod.
  • På så sätt kan vi visualisera hur koden bevarar en 2D-matris med hjälp av " ReDim Reservat " och VBA Transponera funktion.

Läs mer: VBA för att transponera matriser i Excel (3 metoder)

Saker att komma ihåg

  • ReDim Reservat kan inte ändra den nedre gränsen för matrisen. För att göra det måste vi använda Transponera funktion.
  • Vi kan bara använda ReDim på dynamiska matriser.

Slutsats

Vi har visat dig två snabba sätt att " ReDim Reservat " a 2D matris i Excel VBA. Om du stöter på några problem med dessa metoder eller om du har någon feedback till mig, är du välkommen att kommentera nedan. Dessutom kan du besöka vår webbplats ExcelWIKI för fler Excel-relaterade artiklar. Tack för att du läste, fortsätt att vara duktig!

Hugh West är en mycket erfaren Excel-tränare och analytiker med över 10 års erfarenhet i branschen. Han har en kandidatexamen i redovisning och ekonomi och en magisterexamen i företagsekonomi. Hugh har en passion för undervisning och har utvecklat ett unikt undervisningssätt som är lätt att följa och förstå. Hans expertkunskap om Excel har hjälpt tusentals studenter och yrkesverksamma över hela världen att förbättra sina färdigheter och utmärka sig i sina karriärer. Genom sin blogg delar Hugh med sig av sin kunskap med världen, och erbjuder gratis Excel-handledning och onlineutbildning för att hjälpa individer och företag att nå sin fulla potential.