Arrays

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.