Um mehr als eine Datenspalte zu speichern, benötigen wir eine andere Dimension des Arrays. Beispiel:
Daten in einem zweidimensionalen Array speichern:
'Erklärung Dim array_example(10, 2) '11 x 3 „definiertes“ Array 'Daten in einem Array speichern For i = 0 To 10 array_example(i, 0) = Range("A" & i + 2) array_example(i, 1) = Range("B" & i + 2) array_example(i, 2) = Range("C" & i + 2) Next
Hier sind einige Beispiele für die Arbeit mit diesen Werten:
MsgBox array_example(0, 0) '=> Rückgabe: 03.11.2026 MsgBox array_example(0, 1) '=> gibt zurück: 24 MsgBox array_example(9, 2) '=> gibt zurück: NO MsgBox array_example(10, 2) '=> gibt zurück: YES
Stellen wir uns für einen Moment vor, dass wir die Daten in unserem Array regelmäßig aktualisieren müssen und daher zum Zeitpunkt der Deklaration keine festen Werte zuweisen können ...
Um die Zeilennummer der letzten nicht leeren Zelle, also der letzten Zeile unserer Datenbank, herauszufinden, verwenden wir die folgende Formel:
last_row = Range("A1").End(xlDown).Row
Excel akzeptiert keine Variablen in der Deklaration.
Deklarieren Sie stattdessen ein dynamisches Array (mit leeren Klammern) und definieren Sie dann seine Größe mit Redim:
Dim array_example() ReDim array_example(last_row - 2, 2)
Mit dem folgenden Verfahren können Sie alle Zeilen Ihres Datensatzes (Tabelle) in unserem Array speichern:
Dim array_example() ReDim array_example(last_row - 2, 2)
Im vorherigen Beispiel war die letzte Zahl in unserem Array last_row - 2:
For i = 0 To last_row - 2
Eine andere Möglichkeit, die letzte Zahl in unserem Array zu ermitteln, könnte die Verwendung von Ubound sein:
For i = 0 To UBound(array_example)
Diese Funktion gibt die größte Zahl im Array für die ausgewählte Dimension zurück (die erste Dimension ist die Standardeinstellung).
Hier sind einige Beispiele, die dies deutlicher machen sollen:
Sub example() Dim array_example(10, 2) MsgBox UBound(array_example) '=> gibt zurück: 10 MsgBox UBound(array_example, 1) '=> gibt zurück: 10 MsgBox UBound(array_example, 2) '=> gibt zurück: 2 End Sub
Es ist möglich, ein Array mit Werten aus einem Bereich von Zellen in einem Arbeitsblatt zu füllen, ohne eine Schleife zu verwenden:
'Erklärung Dim array_example(10, 2) '11 x 3 „definiertes“ Array 'Daten in einem Array speichern For i = 0 To 10 array_example(i, 0) = Range("A" & i + 2) array_example(i, 1) = Range("B" & i + 2) array_example(i, 2) = Range("C" & i + 2) Next
Der vorangehende Code kann effektiv durch diesen ersetzt werden:
'Erklärung Dim array_example() 'Daten in einem Array speichern array_example = Range("A2:C12").Value
Obwohl die zweite Methode attraktiver zu sein scheint als die erste, sollten Sie bedenken, dass die Implementierung in den meisten Fällen mehr Zeit kosten kann als die erste.
Wenn Sie die Daten auf diese Weise in Ihrem Array speichern, ist die erste Zahl 1 statt 0, was zu Verwirrung führen kann ...
Wenn Sie sich später beim Erweitern des Codes dafür entscheiden, nur Daten im Array zu speichern, die bestimmten Suchkriterien entsprechen (oder eine völlig andere Operation ausführen), müssen Sie den Code mit einer anderen Schleifenfunktion komplett neu schreiben ...
Diese zweite Methode ist jedoch sehr nützlich, wenn Sie den gesamten Inhalt eines großen Datensatzes speichern müssen, da sie schneller ist als eine Schleife (Einsparung von etwa 0,2 Sekunden pro 15.000 Datensätze).
Wenn Sie jedoch ein Array mit „festen“ Inhalten erstellen müssen.
Eine Lösung könnte darin bestehen, die Werte Band für Band aufzuzeichnen:
Dim en(5) en(0) = "IF" en(1) = "VLOOKUP" en(2) = "SUM" en(3) = "COUNT" en(4) = "ISNUMBER" en(5) = "MID"
Glücklicherweise können Sie diesen Code vereinfachen, indem Sie ein Array (Array) verwenden:
en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID")
Hier ist eine Demonstration der Verwendung der Funktion Replace (dies wird Ihnen helfen, das folgende Beispiel zu verstehen):
Sub replace_example() Dim var_translate As String 'Textband für dieses Beispiel var_translate = "Hello World !" 'Ersetzen Sie im Textband „Welt“ durch „Sie“. var_translate = Replace(var_translate, "World", "you") 'Klebeband nach dem Austausch MsgBox var_translate '=> gibt „Hallo du!“ zurück End Sub
Wenn wir nun eine Reihe von Werten durch einen anderen Datensatz ersetzen möchten, ist die Verwendung von Arrays und der Funktion Array äußerst nützlich:
Sub translate() 'Ein vereinfachtes Beispiel für die Übersetzung von Formeln vom Englischen ins Französische Dim var_translate As String 'Textband für dieses Beispiel var_translate = "Formula to translate : SUM(IF(ISNUMBER(A1:E1),A1:E1,0))" 'Zwei Wertesätze en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID") fr = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT") 'Ersetzen Sie „SI“ durch „IF“, „RECHERVEV“ durch „VLOOKUP“ usw. For i = 0 To UBound(en) var_translate = Replace(var_translate, en(i), fr(i)) Next 'Klebeband nach dem Austausch MsgBox var_translate '=> gibt „Formula zum Übersetzen: SOMME(SI(ESTNUM(A1:E1),A1:E1,0))“ zurück End Sub
Mit der Funktion Split können wir die Zeichenfolge in Teile aufteilen und die resultierenden Werte in ein Array schreiben.
Gehen Sie wie folgt vor, um ein Menüband in ein Array umzuwandeln:
variable = "IF/VLOOKUP/SUM/COUNT/ISNUMBER/MID"
Verwenden Sie die VBA-Funktion Split und geben Sie das Trennzeichen an:
en = Split(variable, "/")
Das Array „en“ gibt die folgenden Werte zurück:
MsgBox en(0) '=> gibt zurück: IF MsgBox en(1) '=> gibt zurück: VLOOKUP MsgBox en(2) '=> gibt zurück: SUM MsgBox en(3) '=> gibt zurück: COUNT MsgBox en(4) '=> gibt zurück: ISNUMBER MsgBox en(5) '=> gibt zurück: MID
Die folgenden drei Arrays geben ebenfalls dieselben Werte zurück:
en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID") en = Split("IF,VLOOKUP,SUM,COUNT,ISNUMBER,MID", ",") en = Split("IF VLOOKUP SUM COUNT ISNUMBER MID", " ")
Das folgende Beispiel gibt den dritten Wert in der Zeichenfolge zurück:
MsgBox Split("IF,VLOOKUP,SUM,COUNT,ISNUMBER,MID", ",")(2) '=> gibt zurück: SUM
Die Umkehrung von Split ist die VBA-Funktion Join.
Diese Funktion sammelt die Werte eines Arrays in einem String.
MsgBox Join(Array(1, 2, 3, 4, 5), "") '=> gibt zurück: 12345