Collection und Arrays

Und hier ist ein weiterer Artikel von meiner alten Seite. Thema ist die Verwendung der Klasse Collection in Kombination mit Arrays. Ursprüngliches Ziel war ein Workaround zum dynamischen Erstellen von Variablennamen.

EM2008 - Collection und Arrays

Seit Kurzem helfe ich anderen Usern im Herber-Forum
(www.herber.de/forum). Diese
Arbeit kostet mich nur wenige Zeit, kann aber anderen Excel-Anwendern
viel Arbeit und Mühen ersparen. Aber auch ich profitiere davon.
Viele Fragen sind sehr interessant und auch die Antworten der anderen
Forumsmitglieder sind oft sehr lesenswert. Das heutige VBA-Beispiel
ist aus einer solchen Forumsfrage entstanden.

Kann ich Variablennamen dynamisch erstellen?

Die Frage war, ob man durch das Verknüpfen mehrerer Strings
Variablen ansprechen kann. Das Ganze wurde dann auch noch mit Arrays
kombiniert. Zum Beispiel so:

Dim DeutschlandWert(10) As Double
Dim OesterreichWert(10) As Double
Dim SchweizWert(10) As Double
Dim i As Integer
Dim str1 As String, str2 As String

str1 = "Deutschland"

str2 = "Wert"
For i = 1 To 10

str1 & str2 (i) = i*3
Next
Debug.Print DeutschlandWert(10)

Das geht natürlich nicht!

(Fast nicht, man kann aber tatsächlich
Variablennamen dynamisch erstellen, allerdings nur wenn man auch das
ganze Modul dynamisch erstellt. Dazu vielleicht später mehr. )

Die erste Lösung – 2-dimensionales Array

Die erste Lösung war eine sehr saubere und schöne
Lösung. Es wurde ein 2-dimensionales Array eingeführt.

Dim LandWert(3, 10) as double

DeutschlandWert(...) kann dann mit LandWert(1, ...),
OesterreichWert(...) mit LandWert(2, ...) und SchweizWert(...) mit
LandWert(3, ...) aufgerufen werden. Kein Problem solange man weiß,
dass Deutschland in diesem Beispiel „1“ ist.

Select Case strLand
Case \'84Deutschland"

debug.print LandWert(1, 10)

Case \'84Oesterreich"
debug.print LandWert(2, 10)
Case \'84Schweiz"

debug.print LandWert(3, 10)

End Select

Durch Einfügen von drei Konstanten kann der Zugriff auch
einfacher gestaltet werden:

Const Deutschland = 1
Const Oesterreich = 2
Const Schweiz = 3
Debug.Print LandWert(Deutschland, 10)

Die zweite Lösung – Collection und Arrays

Die Verwendung eines Collection-Objekts stellt eine interessante
Alternative dar. Dem Collection Objekt können mittels .Add
-Anweisung weitere Objekte hinzugefügt werden. Der Aufruf der
Objekte kann über einen Index wie im ersten Beispiel erfolgen.
Zusätzlich kann Parameter Key vergeben werden, dies ermöglicht
den Zugriff auf die einzelnen Elemente der Collection mittels string.
Im Beispiel sind die „Key“-Wörter: BRD, A und CH gewählt
worden.

Sub CollectionMitArrays()
Dim i As Integer
Dim col As Collection
Dim Deutschland(10) As Double
Dim Oesterreich(10) As Double
Dim Schweiz(10) As Double

Set col = New Collection

For i = 1 To 10

Deutschland(i) = 3 * i

Oesterreich(i) = 2 * i

Schweiz(i) = 1 * i
Next

Call col.Add(Deutschland, "BRD")
Call col.Add(Oesterreich, "A")
Call col.Add(Schweiz, "CH")

Debug.Print col.Item("BRD")(5)
Debug.Print col.Item("A")(4)
Debug.Print col.Item("CH")(3)
End Sub

Bei allgemeinen Fragen zur Verwendung des Collection-Objekts und
seinen Eigenschaften empfehle ich die Excel-Hilfe oder meinen Artikel zum Collection-Objekt.

Your rating: Keine Average: 4 (5 votes)