Arrays sind Datenfelder, die je nach Dimensionierung eine unterschiedliche Anzahl von Daten aufnehmen können. Ein Array kannst du dir als Tabelle vorstellen, die nicht real sichtbar, aber dennoch vorhanden ist.
Ein Array ist eine Variable, die mehrere Datenfelder und damit auch mehrere Daten enthält. Alle Datenfelder haben den Datentyp, der für das Array deklariert wurde. Wurde kein Datentyp festgelegt, hat das Array automatisch den Datentyp Variant.
Zur Deklarierung von Variablen kannst du auch gern in einem früheren Beitrag nachlesen.
Eindimensionale Arrays
In einem eindimensionalen Array werden die Daten, ähnlich wie in einer einspaltigen Tabelle, hintereinander als Datenelemente gespeichert.
Ein Beispiel: Du möchtest die Wochentage in einem Array speichern, das Array soll also sieben Elemente bekommen. Hier die erste Möglichkeit:
Sub Woche1()
Dim arrWoche(1 To 7)
arrWoche(1)=“Montag“
arrWoche(2)=“Dienstag“
arrWoche(3)=“Mittwoch“
arrWoche(4)=“Donnerstag“
arrWoche(5)=“Freitag“
arrWoche(6)=“Samstag“
arrWoche(7)=“Sonntag“
MsgBox arrWoche(5)
End Sub
Startest du das Makro, zeigt es dir am Schluss diese Mitteilung in einer MsgBox:
Den Index des Arrays hast du bereits mit der Deklaration vorbestimmt, indem du „1 To 7“ festgelegt hast. Das erste Element hat demnach den Index „1“.
In einem zweiten Beispiel wird dies nicht festgelegt.
Sub Woche2()
Dim arrWoche
arrWoche=Array(„Montag“,“Dienstag“,“Mittwoch“,“Donnerstag“,“Freitag“,“Samstag“,“Sonntag“)
MsgBox arrWoche(5)
End Sub
Nachdem du das Makro gestartet hast, zeigt dir die MsgBox ein anderes Ergebnis als beim ersten Makro.
Der Grund ist, dass der Index ohne besondere Deklaration immer mit „0“ beginnt. Die „0“ entspricht damit dem ersten Element, dem Montag, die „5“ demzufolge dem Samstag.
Beachte bitte, dass hier das Array in einer anderen Art und Wiese mit den Daten gefüllt wird. Die Datenelemente werden nicht einzeln zugewiesen, sondern als Klammerausdruck hintereinander aufgezählt. Vor die Klammer wird das Wort „Array“ gesetzt.
Es gibt noch eine weitere Möglichkeit, dem Array Werte zuzuweisen. Dazu hast du auf deinem Arbeitsblatt die Wochentage aufgelistet.
Deklariere dazu das Array vollständig, mit Dimensionierung und Festlegung des Datentyps.
Sub Woche3()
Dim arrWoche(7) As Variant
Dim i As Integer
For i=1 To 7
arrWoche(i)=Cells(1+i,2)
Next i
MsgBox arrWoche(5)
End Sub
In der Deklaration legst du fest, dass das Array sieben Elemente und den Datentyp Variant haben soll.
Zusätzlich deklarierst du die Zählvariable „i“.
Mit einer For-Next-Schleife durchläuft das Makro jetzt schrittweise den Tabellenbereich B2:B8 und weist die Inhalte den Array-Elementen zu.
Statt „Range“ verwendest du hier „Cells“. Die Zeile ist im ersten Schritt (i=1) 1+i, also 2, die Spalte ist 2.
Die MsgBox teilt dir das fünfte Element mit, Freitag.
Die Ausgabe eines Array-Elements erfolgte bisher über eine MsgBox. Die Ausgabe kann natürlich auch in eine Zelle des Arbeitsblattes erfolgen.
Nehme z.B. Sub Woche2() und gestalte es diesbezüglich um.
Sub Woche4()
Dim arrWoche
arrWoche=Array(„Montag“,“Dienstag“,“Mittwoch“,“Donnerstag“,“Freitag“,“Samstag“,“Sonntag“)
Range(„E2“)=arrWoche(5)
End Sub
Ergebnis:
Wie schon oben gesehen, wird ab 0 gezählt. Das Element 5 ist wieder der Samstag.
Mehrdimensionale Arrays
Grundsätzlich gehst du bei mehrdimensionalen Arrays nicht anders vor als bei eindimensionalen.
Im Beispiel liegt dir eine Tabelle mit drei Zeilen und zwei Spalten vor, die Zahlenwerte enthält.
Diese Tabelle willst du in ein Array einlesen. Hier ist eine Möglichkeit:
Sub Zahlen1()
Dim arrWerte() As Variant
arrWerte()=Range(„B138:C140“)
MsgBox arrWerte(2,2)
End Sub
Deklariere zuerst die Variable. Mit den Klammern hinter „arrWerte“ wird die Variable zum Array. Fülle dann das Array mit den Werten aus dem Bereich B138:C140.
Die MsgBox zeigt dir abschließend den Wert aus der zweiten Zeile und der zweiten Spalte.
Weitete Varianten zum Erstellen eines mehrdimensionalen Arrays sind möglich. Probiere es aus.
Entdecke mehr von Clevercalcul
Subscribe to get the latest posts sent to your email.
Very useful article.
Thank you Sandeep. 😊