VBA Mehrdimensionale Arrays (2D-Arrays)
In this Article
In diesem Tutorial werden 2D- und mehrdimensionale Arrays in VBA behandelt.
Mehrdimensionales Array (2D-Arrays)
Mehrdimensionale Arrays sind Arrays, die mehr als eine Dimension enthalten, normalerweise zwei oder drei Dimensionen, aber Arrays können bis zu 32 Dimensionen haben.
Deklarieren eines 2D-Arrays
Um ein Array mit mehr als einer Dimension zu erstellen, verwenden Sie Kommas, um jede einzelne Dimension zu definieren:
Dim intArr(2,3) as Integer
Auffüllen eines 2D-Arrays
Der folgende Code füllt ein 2D-Array auf und füllt dann die Zeilen und Spalten eines Arbeitsblatts mit den Array-Werten.
Sub Auffuellen2D()
'Das 2D-Array deklarieren
Dim intA(2, 3) As Integer
'Variablen deklarieren
Dim zeile As Integer
Dim spalte As Integer
'das Array auffüllen
intA(0, 0) = 45
intA(0, 1) = 50
intA(0, 2) = 55
intA(0, 3) = 60
intA(1, 0) = 65
intA(1, 1) = 70
intA(1, 2) = 75
intA(1, 3) = 80
intA(2, 0) = 85
intA(2, 1) = 90
intA(2, 2) = 95
intA(2, 3) = 100
'Das Array durchlaufen und Excel auffüllen
For zeile = 0 To 2
For spalte = 0 To 3
Cells(zeile + 1, spalte + 1).Value = intA(zeile, spalte)
Next spalte
Next zeile
End Sub
Ihr Excel-Arbeitsblatt sollte dann wie folgt ausgefüllt sein.
Auffüllen eines 2D-Arrays aus Excel-Daten
Der folgende Code füllt ein 2D-Array aus einem Excel-Arbeitsblatt aus und füllt dann ein anderes Blatt mit diesen Daten.
Sub Auffuellen2D()
'Die Arbeitsblätter deklarieren
Dim ws_Quelle As Worksheet
Dim ws_Ziel As Worksheet
'Das Array deklarieren
Dim wsDaten(10, 2) As Variant
'Die Variablen deklarieren
Dim zeile as Integer
Dim spalte As Integer
'auf das Quellblatt verweisen
Set ws_Quelle = Worksheets("Tabelle1")
'die Informationen aus dem Quellblatt abrufen und das Array auffüllen
For zeile = LBound(wsDaten, 1) To UBound(wsDaten, 1)
For spalte = LBound(wsDaten, 2) To UBound(wsDaten, 2)
wsDaten(zeile, spalte) = ws_Quelle.Range("A2").Offset(zeile, spalte).Value
Next spalte
Next zeile
'Auf das Zielblatt verweisen
Set ws_Ziel = Worksheets("Tabelle2")
' das Zielblatt aus dem Array auffüllen
For zeile = LBound(wsDaten, 1) To UBound(wsDaten, 1)
For spalte = LBound(wsDaten, 2) To UBound(wsDaten, 2)
ws_Ziel.Range("A1").Offset(zeile,spalte).Value = wsDaten(zeile, spalte)
Next spalte
Next zeile
End Sub
Die Größe mit ReDim und Re-Dim Preserve ändern
Sie können die Größe eines Arrays mit ReDim ändern (weitere Informationen).
Sub GroesseAendern2D()
'Das Array deklarieren
Dim varArray() as Variant
'Die Größe des Arrays deklarieren
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Buchhalter"
varArray(1, 1) = "Sekretärin"
varArray(1, 2) = "Arzt"
'Die Größe des Arrays neu deklarieren
ReDim varArray(0, 1)
'Das Array neu befüllen
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
End Sub
Wenn Sie das Array neu deklarieren, verlieren Sie alle Daten, die zuvor im Array enthalten waren, es sei denn, Sie verwenden die Anweisung ReDim Preserve.
Sub GroesseAendern2D()
'das Array deklarieren
Dim varArray() as Variant
'Die Größe des Arrays deklarieren
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Buchhalter"
varArray(1, 1) = "Sekretärin"
varArray(1, 2) = "Arzt"
'Die Größe des Arrays neu deklarieren
ReDim Preserve varArray(1, 3)
'Das Array mit zusätzlichen Werten auffüllen
varArray(0, 3) = "Rob Barnes"
varArray(1, 3) = "Klempner"
End Sub
Sie können nur die Größe der letzten Dimension eines Arrays ändern, wenn Sie die ursprünglichen Daten im Array mit Re-Dim Preserve beibehalten wollen.
Wenn Sie auf Debuggen klicken, wird der Fehler hervorgehoben und zeigt an, dass die erste Dimension im Array nicht die gleiche wie die beim ursprünglichen Deklarieren der Arraygröße ist.