TOP

VBA-Lektion 13.1. Verwenden von Arrays (Arrays)

Arrays (Arrays) werden sehr häufig in der Programmierung verwendet, unter anderem in Excel VBA.

Ein Array ist im Wesentlichen eine einzelne Variable mit vielen Zellen zum Speichern von Werten, während eine typische Variable nur eine Speicherzelle hat, in der sie nur einen Wert speichern kann.

Auf ein Array kann als Ganzes zugegriffen werden, wenn Sie auf alle darin enthaltenen Werte verweisen möchten, oder Sie können auf seine einzelnen Elemente verweisen.

Sie können ein Array deklarieren, um mit einer Reihe von Werten desselben Datentyps zu arbeiten. Wir haben dies bereits in VBA-Lektion 6.2. Datentypen (Variables) Aber lasst uns jetzt noch tiefer eintauchen ...

Warum werden Arrays verwendet?

Stellen Sie sich vor, Sie versuchen, eine Prozedur zu schreiben, in der Sie bis zu 500 Werte speichern müssen. Wenn Sie 500 separate Variablen erstellen müssen, wird es sehr schwierig. In der Mitte des Arrays wird das Speichern und Arbeiten mit diesen Werten viel einfacher.

Der zweite Grund für die Verwendung von Arrays ist ihre Geschwindigkeit. Das Lesen von Daten aus Arrays nimmt deutlich weniger Zeit in Anspruch als aus Tabellen (aus Zellen) im Arbeitsblatt Excel.


Ein Beispiel für die Verwendung von Arrays

Hier ist ein Beispiel, das den offensichtlichen Vorteil der Verwendung von VBA-Arrays in Excel zeigt.

Das erste Arbeitsblatt („DS“) enthält einen Datensatz: 5000 Zeilen mal 3 Spalten:

Auf dem zweiten Blatt finden Sie eine Übersichtstabelle, die alle „Ja“-Antworten („YES“) nach Jahr und Kunde berücksichtigt:

In diesem Fall verwendet das Verfahren eine Schleife, um den Datensatz zu verarbeiten und die Anzahl der „Ja“-Antworten für jedes Jahr und jede Kundennummer aufzuzeichnen und diese Daten dann in die entsprechenden Zellen einzugeben.

Ohne die Verwendung von Arrays würde die Ausführung dieser Prozedur Excel 131,44 Sekunden dauern:

Aber es dauert nur 1,74 Sekunden, die Daten zunächst in einem Array (aus dem „DS“-Arbeitsblatt) zu speichern und dann die gleichen Berechnungen durchzuführen (unter Verwendung der Arrays anstelle des „DS“-Arbeitsblatt-Datensatzes):

Wenn wir uns dafür entscheiden, unser Verfahren zu optimieren, indem wir nur die Daten im Array speichern, die „YES“-Antworten enthalten (was etwa 3/4 der Daten ausmacht), würde dies nur 1,02 Sekunden dauern:

Dies ist ein gutes Beispiel dafür, wie Sie mit Arrays eine Prozedur 128-mal schneller ausführen können. Das Ergebnis unserer Optimierung wäre noch besser, wenn wir mit vielen Datensätzen gleichzeitig arbeiten würden.

Wir werden am Ende der Lektion auf die Details unseres Beispiels zurückkommen.

Arrays deklarieren

Nachfolgend finden Sie einige Beispiele für die Deklaration von Arrays in VBA (falls Ihnen die ersten beiden Beispiele nicht klar sind, lesen Sie es):

 'Ein Beispiel für die Deklaration eines eindimensionalen Arrays
 Dim array1(4)

 'Ein Beispiel für die Deklaration eines zweidimensionalen Arrays
 Dim array2(6, 1)

 'Ein Beispiel für die Deklaration eines dynamischen Arrays
 Dim array3()

Wenn Sie beim Deklarieren von Arrays keine festen Werte eingeben können (weil diese beispielsweise von der Größe des Datensatzes abhängen), lassen Sie die Klammern leer.

Sie müssen keinen Datentyp (String, Long usw.) deklarieren, obwohl dies in vielen Fällen die Ausführung Ihrer Prozedur verlangsamt.

Datenspeicherung in einem Array

Versuchen wir, einige Daten in einem Array zu speichern:

In diesem Fall möchten wir 11x1-Werte speichern, daher müssen wir ein eindimensionales Array erstellen:

 'Erklärung
 Dim array_example(10)

Vergessen Sie nicht, dass die Nummerierung der Elemente im Array mit 0 beginnt (dies ist in der Programmierung Standard, es lohnt sich also, sich sofort daran zu gewöhnen, obwohl Sie diesen Ansatz tatsächlich in VBA ändern können).

Jedes Element im Array erhält nun seinen Wert:

 'Werte in einem Array speichern
 array_example(0)  = Range("A2")
 array_example(1)  = Range("A3")
 array_example(2)  = Range("A4")
 array_example(3)  = Range("A5")
 array_example(4)  = Range("A6")
 array_example(5)  = Range("A7")
 array_example(6)  = Range("A8")
 array_example(7)  = Range("A9")
 array_example(8)  = Range("A10")
 array_example(9)  = Range("A11")
 array_example(10) = Range("A12")

Sie können jedes Array-Element bearbeiten oder ändern, als wäre es eine normale Variable.

Als nächstes ist ein Beispiel, in dem wir array_example(8) verwenden:

Sub example()
     'Erklärung
     Dim array_example(10)
     
     'Werte in einem Array speichern
     array_example(0)  = Range("A2")
     array_example(1)  = Range("A3")
     array_example(2)  = Range("A4")
     array_example(3)  = Range("A5")
     array_example(4)  = Range("A6")
     array_example(5)  = Range("A7")
     array_example(6)  = Range("A8")
     array_example(7)  = Range("A9")
     array_example(8)  = Range("A10")
     array_example(9)  = Range("A11")
     array_example(10) = Range("A12")
     
     'Test 1
     MsgBox array_example(8) '=> kehrt zurück: 04.02.2016
    
     'Einen der Werte ändern
     array_example(8) = Year(array_example(8))
     
     'Test 2
     MsgBox array_example(8) '=> Rückgabe: 2016
End Sub

Eine For-Schleife wäre eine bessere Option, um das Array schneller zu speichern:

 'Erklärung
 Dim array_example(10)

 'Werte in einem Array speichern
 For i = 0 To 10
    array_example(i) = Range("A" & i + 2)
 Next