HOWTO · VBA
Ein String-Array in VBA deklarieren und initialisieren
Dieses Tutorial zeigt, wie Sie ein String-Array in VBA deklarieren und initialisieren.
Auf dieser Seite
Verwenden Sie in VBA ein dynamisches String()-Array, wenn seine Größe erst während der Programmausführung feststeht. Ist die Anzahl der Elemente bekannt, können Sie stattdessen die Grenzen ausdrücklich angeben. Ein dynamisches Array lässt sich mit Split() befüllen oder Sie speichern das Ergebnis von Array() in einem Variant; Letzteres ist ein Variant, das ein Array enthält, kein typisiertes String-Array. Die folgenden Beispiele zeigen, wie Sie beide Formen initialisieren, Grenzen festlegen und mit zwei Dimensionen arbeiten.
Ein dynamisches String-Array deklarieren und initialisieren
Ein Variant kann das von Array() zurückgegebene Array aufnehmen. Seine Elemente sind Variants. Das ist praktisch, wenn Sie eine Liste von Werten direkt angeben möchten und keine Deklaration als String() benötigen. Ein nicht qualifizierter Aufruf von Array() verwendet für die untere Grenze die Einstellung Option Base des Moduls. Bei der Standardeinstellung Option Base 0 befindet sich der vierte Eintrag am Index 3:
Dim animals As Variant
animals = Array("Lion", "Tiger", "Cheetah", "Monkey", "Elephant", "Zebra")
Debug.Print animals(3) gibt Monkey aus.
Für ein typisiertes dynamisches String-Array deklarieren Sie die Variable mit leeren Klammern und weisen ihr das Ergebnis von Split() zu. Split() zerlegt eine Zeichenkette anhand eines Trennzeichens in ein nullbasiertes String-Array, unabhängig von der Einstellung Option Base des Moduls. Das ist nützlich, wenn die Werte aus einer einzelnen, durch Trennzeichen getrennten Eingabe stammen:
Dim animals() As String
animals = Split("Lion,Tiger,Cheetah,Monkey,Elephant,Zebra", ",")
Debug.Print animals(2) gibt Cheetah aus.
Verwenden Sie ReDim, wenn Sie ein dynamisches Array bereitstellen oder seine Größe ändern müssen, bevor Sie die einzelnen Elemente zuweisen. Die Deklaration Dim animals() As String legt die typisierte Array-Variable an; ReDim animals(0 To 5) reserviert sechs String-Elemente mit den Indizes 0 bis 5.
Ein Array fester Größe deklarieren und initialisieren
Wenn die Anzahl der Elemente bekannt ist, geben Sie die untere und obere Grenze direkt an. Dim animals(0 To 5) As String erstellt sechs Elemente, da beide Grenzwerte eingeschlossen sind. Weisen Sie jedem Wert seinen Index zu und lesen Sie anschließend das gewünschte Element aus:
animals(0) = "Lion"
animals(1) = "Tiger"
animals(2) = "Cheetah"
animals(3) = "Monkey"
animals(4) = "Elephant"
animals(5) = "Zebra"
Debug.Print animals(4) gibt Elephant aus.
Ausdrücklich angegebene Grenzen machen die gültigen Indizes klar und vermeiden die Abhängigkeit von einem Modulstandard. Platzieren Sie die Deklaration und Zuweisungen in einem echten Verfahren gemeinsam, beispielsweise innerhalb von Sub StaticArrayDemo() und vor dessen End Sub.
Array-Grenzen festlegen und Option Base verwenden
Option Base legt für Arrays, deren untere Grenze nicht ausdrücklich angegeben ist, den Standardwert im jeweiligen Modul fest. Schreiben Sie Option Base 1 in den Deklarationsbereich des Moduls, also vor die Verfahren. Dann hat Dim animals(6) As String in diesem Modul die Indizes 1 bis 6. Diese Anweisung ändert keine Arrays mit ausdrücklich angegebenen Grenzen: Dim animals(0 To 5) As String verwendet weiterhin die Indizes 0 bis 5.
Beim Anpassen von Code sind ausdrücklich angegebene Grenzen oft leichter nachzuvollziehen. Ein nicht qualifizierter Aufruf von Array() richtet sich nach der Einstellung Option Base des Moduls: Bei Option Base 0 ist die untere Grenze 0, bei Option Base 1 ist sie 1. Split() gibt dagegen unabhängig von Option Base immer ein nullbasiertes Array zurück. Verwenden Sie VBA.Array(), wenn die untere Grenze eines Array()-Ergebnisses nicht von der Moduleinstellung abhängen soll; dieser qualifizierte Aufruf verwendet die untere Grenze 0. Berücksichtigen Sie diese Unterschiede, wenn Sie Arrays kombinieren oder Indizes auswählen.
Ein mehrdimensionales String-Array deklarieren und befüllen
Geben Sie für jede Dimension eine untere und eine obere Grenze an. In Dim values(1 To 5, 1 To 5) As String wählt der erste Index eine Zeile und der zweite eine Spalte aus. So entstehen 25 String-Elemente. Verschachtelte Schleifen können jede Position befüllen. Wenn Sie beide Zählvariablen als Integer deklarieren, hat jede Variable den vorgesehenen numerischen Typ:
Dim values(1 To 5, 1 To 5) As String
Dim i As Integer, j As Integer
For i = 1 To 5
For j = 1 To 5
values(i, j) = "The value of (" & i & "," & j & ") is " & i * j
Debug.Print values(i, j)
Next j
Next i
Das Raster erhält für jede Position ein Label, das Zeilenindex und Spaltenindex sowie ihr Produkt angibt. Bei (3, 4) bedeutet The value of (3,4) is 12, dass Zeilenindex 3 und Spaltenindex 4 multipliziert werden und das Produkt 12 ist. Das Label bleibt im unveränderten Beispiel auf Englisch. Achten Sie darauf, dass Array-Grenzen und Schleifengrenzen übereinstimmen, damit jede Zuweisung einen gültigen Index verwendet.
Führen Sie das folgende kurze Python-Beispiel aus, um dasselbe nullbasierte Auswahlmuster wie oben zu sehen:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
animals = ["Lion", "Tiger", "Cheetah", "Monkey", "Elephant", "Zebra"]
print(animals[3])
Monkey