Eine „normale“ Variable kann genau einen Wert speichern. Anders gesagt, sie ist ein „Container“ für einen Wert. Ein Array (gelegentlich auch „Datenfeld“ genannt) ist dagegen ein Container für mehrere Werte. Man erkennt ein Array daran, dass nach seinem Namen ein Klammerpaar folgt, in dem ein Index angegeben ist.
Wochentag | ||||||
0 So |
1 Mo |
2 Di |
3 Mi |
4 Do |
5 Fr |
6 Sa |
Sub Tage() Dim Wochentag(6) As String Wochentag(0) = "Sonntag" Wochentag(1) = "Montag" Wochentag(2) = "Dienstag" Wochentag(3) = "Mittwoch" Wochentag(4) = "Donnerstag" Wochentag(5) = "Freitag" Wochentag(6) = "Samstag" Debug.Print Wochentag(5) End Sub
In der Prozedur gibt es ein Stringarray namens Wochentag
, der von
Wochentag(0)
bis Wochentag(6)
7 Werte speichern kann.
Wie in der EDV üblich, beginnt man mit „0“ zu zählen. Um mit einem anderen Wert
als 0 zu beginnen, kann man auch selbst eine Untergrenze festlegen:
Dim Zeichen(65 To 97) As String * 1
Damit wird ein Stringarray erzeugt, der nur die Felder 65 bis 97 enthält.
Durch die Angabe * 1
wurde außerdem festgelegt, dass jeweils nur
ein Zeichen gespeichert werden kann.
Neben solchen eindimensionalen, sind auch mehrdimensionale Arrays möglich:
Sub Schachbrett() Dim Brett(7, 7) As String Brett(0, 0) = "Turm" Brett(0, 1) = "Springer" Brett(0, 2) = "Läufer" Brett(0, 3) = "Dame" Brett(0, 4) = "König" Brett(0, 5) = "Läufer" Brett(0, 6) = "Springer" Brett(0, 7) = "Turm" Brett(1, 0) = "Bauer" Brett(1, 1) = "Bauer" Brett(1, 2) = "Bauer" Brett(1, 3) = "Bauer" Brett(1, 4) = "Bauer" Brett(1, 5) = "Bauer" Brett(1, 6) = "Bauer" Brett(1, 7) = "Bauer" End Sub
Bei der Deklaration eines Arrays mit Dim
muss die Dimension mit einer festen Zahl oder einer Konstanten angegeben werden.
Braucht man es variabel, weil sich die Anzahl der Felder (nicht die der Dimensionen)
erst im weiteren Programmablauf ergibt, muss die Deklaration zuerst mit einem leeren
Klammerpaar erfolgen und kann danach mit ReDim
geändert werden.
Sub veränderlich() Dim Feld() As Long Dim Anzahl As Byte Anzahl = 3 ReDim Feld(Anzahl) Feld(0) = 5 Debug.Print Feld(0) Anzahl = 4 ReDim Feld(Anzahl) Feld(1) = 3 Debug.Print Feld(0) End Sub
Beim Ausführen dieses Beispiels zeigt sich, dass bei der Redimensionierung
eventuell schon vorhandene Werte im Array gelöscht werden: Der Wert „5“ in
Feld(0)
ist nach der zweiten Redimensionierung verschwunden. Sollen
die Werte erhalten bleiben, geht das mit
ReDim Preserve Feld(Anzahl)
.
In einem sehr viel späteren Kapitel lernen wir noch eine Alternative zu Arrays kennen, die für kleinere, flexibel gestaltbare Datenfelder in Frage kommen kann.