Arrays in Visual Basic für Anwendungen

Arrays in Visual Basic for Application sind Strukturen, die normalerweise Sätze verwandter Variablen desselben Typs speichern. Auf Array-Einträge wird über ihren numerischen Index zugegriffen.

Beispielsweise gibt es ein Team von 20 Personen, deren Namen für die spätere Verwendung im VBA-Code gespeichert werden müssen. Man könnte einfach 20 Variablen für jeden Namen deklarieren, etwa so:

Dim Team_Member1 als String Dim Team_Member2 als String ... Dim Team_Member20 als String

Aber Sie können eine viel einfachere und organisiertere Methode verwenden – speichern Sie eine Liste von Teammitgliedsnamen in einem Array von 20 Variablen wie Schnur:

Dim Team_Members(1 To 20) als String

In der oben gezeigten Zeile haben wir ein Array deklariert. Lassen Sie uns nun einen Wert in jedes seiner Elemente schreiben, wie folgt:

Team_Members(1) = "John Smith"

Ein zusätzlicher Vorteil des Speicherns von Daten in einem Array im Vergleich zur Verwendung separater Variablen wird offensichtlich, wenn es notwendig wird, dieselbe Aktion für jedes Element des Arrays auszuführen. Wenn die Namen der Teammitglieder in 20 separaten Variablen gespeichert würden, müssten jedes Mal 20 Codezeilen geschrieben werden, um dieselbe Aktion für jeden von ihnen auszuführen. Wenn die Namen jedoch in einem Array gespeichert sind, können Sie die gewünschte Aktion mit jedem von ihnen mit einer einfachen Schleife ausführen.

Wie es funktioniert, wird unten mit einem Codebeispiel demonstriert, das die Namen jedes Teammitglieds nacheinander in die Spaltenzellen druckt. A aktives Excel-Arbeitsblatt.

Für i = 1 bis 20 Cells(i,1).Value = Team_Members(i) Next i

Offensichtlich ist die Arbeit mit einem Array, das 20 Namen speichert, viel weniger umständlich und genauer als die Verwendung von 20 separaten Variablen. Aber was, wenn diese Namen nicht 20, sondern 1000 sind? Und wenn es zusätzlich erforderlich ist, Familiennamen und Vatersnamen getrennt zu führen?! Es ist klar, dass es ohne die Hilfe eines Arrays bald völlig unmöglich sein wird, eine solche Datenmenge in VBA-Code zu handhaben.

Mehrdimensionale Arrays in Excel Visual Basic

Die oben besprochenen Visual Basic-Arrays werden als eindimensional betrachtet. Das bedeutet, dass sie eine einfache Namensliste speichern. Arrays können jedoch mehrere Dimensionen haben. Beispielsweise kann ein zweidimensionales Array mit einem Werteraster verglichen werden.

Angenommen, Sie möchten die täglichen Verkaufszahlen für Januar für 5 verschiedene Teams speichern. Dies erfordert ein zweidimensionales Array, das 5 Tage lang aus 31 Sätzen von Metriken besteht. Lassen Sie uns ein Array wie folgt deklarieren:

Dim Jan_Sales_Figures(1 bis 31, 1 bis 5) als Währung

Um auf Array-Elemente zuzugreifen Jan_Verkaufszahlen, müssen Sie zwei Indizes verwenden, die den Tag des Monats und die Befehlsnummer angeben. Beispielsweise die Adresse eines Elements, das Verkaufszahlen für enthält 2-oh Teams für 15 .. Januar würde so geschrieben werden:

Jan_Sales_Figures(15, 2)

Auf die gleiche Weise können Sie ein Array mit 3 oder mehr Dimensionen deklarieren – fügen Sie einfach zusätzliche Dimensionen zur Array-Deklaration hinzu und verwenden Sie zusätzliche Indizes, um auf die Elemente dieses Arrays zu verweisen.

Deklarieren von Arrays in Excel Visual Basic

Weiter oben in diesem Artikel haben wir uns bereits mehrere Beispiele für die Deklaration von Arrays in VBA angesehen, aber dieses Thema verdient eine genauere Betrachtung. Wie gezeigt, kann ein eindimensionales Array wie folgt deklariert werden:

Dim Team_Members(1 To 20) als String

Eine solche Deklaration teilt dem VBA-Compiler mit, dass das Array Team_Mitglieder besteht aus 20 Variablen, auf die bei Indizes von 1 bis 20 zugegriffen werden kann. Wir könnten jedoch daran denken, unsere Array-Variablen von 0 bis 19 zu nummerieren, in diesem Fall sollte das Array wie folgt deklariert werden:

Dim Team_Members(0 To 19) als String

Tatsächlich beginnt die Nummerierung von Array-Elementen standardmäßig bei 0, und in der Array-Deklaration darf der Anfangsindex überhaupt nicht angegeben werden, wie hier:

Dim Team_Members(19) als String

Der VBA-Compiler behandelt einen solchen Eintrag so, als würde er ein Array aus 20 Elementen mit Indizes von 0 bis 19 deklarieren.

Dieselben Regeln gelten beim Deklarieren von mehrdimensionalen Visual Basic-Arrays. Wie bereits in einem der Beispiele gezeigt, werden bei der Deklaration eines zweidimensionalen Arrays die Indizes seiner Dimensionen durch ein Komma getrennt:

Dim Jan_Sales_Figures(1 bis 31, 1 bis 5) als Währung

Wenn Sie jedoch keinen Startindex für beide Dimensionen des Arrays angeben und es so deklarieren:

Dim Jan_Sales_Figures(31, 5) als Währung

dann wird dieser Eintrag als zweidimensionales Array behandelt, dessen erste Dimension 32 Elemente mit Indizes von 0 bis 31 enthält, und die zweite Dimension des Arrays 6 Elemente mit Indizes von 0 bis 5 enthält.

Dynamische Arrays

Alle Arrays in den obigen Beispielen haben eine feste Anzahl von Dimensionen. In vielen Fällen wissen wir jedoch im Voraus nicht, wie groß unser Array sein soll. Wir können aus der Situation herauskommen, indem wir ein riesiges Array deklarieren, dessen Größe sicherlich größer sein wird, als für unsere Aufgabe erforderlich ist. Eine solche Lösung benötigt jedoch viel zusätzlichen Speicher und kann das Programm verlangsamen. Es gibt eine bessere Lösung. Wir können ein dynamisches Array verwenden – das ist ein Array, dessen Größe während der Ausführung eines Makros beliebig oft eingestellt und geändert werden kann.

Ein dynamisches Array wird wie folgt mit leeren Klammern deklariert:

Dim Team_Members() als String

Als Nächstes müssen Sie die Dimension des Arrays während der Codeausführung mithilfe des Ausdrucks deklarieren ReDim:

ReDim Team_Mitglieder (1 bis 20)

Und wenn Sie während der Ausführung des Codes die Größe des Arrays erneut ändern müssen, können Sie den ReDim-Ausdruck erneut verwenden:

If Team_Size > 20 Then ReDim Team_Members(1 To Team_Size) End If

Beachten Sie, dass die Größenänderung eines dynamischen Arrays auf diese Weise zum Verlust aller im Array gespeicherten Werte führt. Um Daten bereits im Array zu speichern, müssen Sie das Schlüsselwort verwenden Bewahrenwie unten dargestellt:

If Team_Size > 20 Then ReDim Preserve Team_Members(1 To Team_Size) End If

Leider das Stichwort Bewahren kann nur verwendet werden, um die Obergrenze einer Array-Dimension zu ändern. Die untere Grenze eines Arrays kann auf diese Weise nicht geändert werden. Wenn das Array mehrere Dimensionen hat, verwenden Sie außerdem das Schlüsselwort Bewahren, nur die letzte Dimension des Arrays kann in der Größe geändert werden.

Hinterlassen Sie uns einen Kommentar