Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Assoziatives Array mit VBA?

Forumthread: Assoziatives Array mit VBA?

Assoziatives Array mit VBA?
27.11.2004 13:46:55
Bjoern
Huhu zusammen,
kann man mit VBA auch ein Assoziatives Array programmieren - also ein Array, in dem die Werte nicht (nur) durch Nummern indexiert sind, sondern auch durch Zeichenfolgen? Also in etwas

Sub test()
A = array("Hans" => 100, "Herbert" => 200, ...)
End Sub

Mit der Folge: A("Hans") = 100.
Vielen Dank für Euere Hilfe!
Björn
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Assoziatives Array mit VBA?
27.11.2004 14:17:10
Bjoern
Huhu HW,
Danke für den Tipp! Klasse, mit
Dim c As New Collection

c.Add "Hans", "100"
c.Add "Herbert", "200"

MsgBox c("100")
klappt es. Danke.
Gruß
Bjoern
Anzeige
;
Anzeige

Infobox / Tutorial

Assoziatives Array in Excel VBA nutzen


Schritt-für-Schritt-Anleitung

Um ein assoziatives Array in VBA zu erstellen, kannst Du die Collection oder das Dictionary-Objekt verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (drücke ALT + F11).
  2. Füge ein neues Modul hinzu über Einfügen > Modul.
  3. Definiere eine Collection oder ein Dictionary. Hier ein Beispiel mit einer Collection:
Sub AssoziativesArrayBeispiel()
    Dim c As New Collection

    c.Add "Hans", "100"
    c.Add "Herbert", "200"

    MsgBox c("100") ' Gibt "Hans" zurück
End Sub
  1. Führe das Makro aus und Du wirst sehen, dass die Werte durch Schlüssel indexiert sind.

Häufige Fehler und Lösungen

  • Fehler: "Objektvariable oder With-Blockvariable nicht festgelegt".

    • Lösung: Stelle sicher, dass Du das Dictionary oder die Collection korrekt initialisierst.
  • Fehler: "Element nicht gefunden".

    • Lösung: Überprüfe, ob der Schlüssel korrekt ist. Bei der Verwendung von Collections ist der Schlüssel case-sensitive.

Alternative Methoden

Wenn Du nicht mit Collections oder Dictionaries arbeiten möchtest, kannst Du auch ein assoziatives Array in VBA mit einem benutzerdefinierten Typ und einem Array kombinieren:

Type AssoziativesArray
    Key As String
    Value As Variant
End Type

Sub BeispielMitBenutzerdefiniertemTyp()
    Dim arr(1 To 2) As AssoziativesArray

    arr(1).Key = "Hans"
    arr(1).Value = 100
    arr(2).Key = "Herbert"
    arr(2).Value = 200

    MsgBox arr(1).Value ' Gibt 100 zurück
End Sub

Praktische Beispiele

Ein häufiges Szenario ist die Verwendung eines assoziativen Arrays zur Speicherung von Benutzerdaten. Hier ein Beispiel, wie Du mit einem Dictionary arbeiten kannst:

Sub DictionaryBeispiel()
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    dict.Add "Hans", 100
    dict.Add "Herbert", 200

    MsgBox dict("Hans") ' Gibt 100 zurück
End Sub

Du kannst auch die VBA.HashMap verwenden, um ähnliche Funktionalitäten zu erreichen, jedoch ist das Dictionary in den meisten Fällen die einfachere Wahl.


Tipps für Profis

  • Nutze Error Handling in Deinen VBA-Skripten, um mögliche Laufzeitfehler zu vermeiden.
  • Achte darauf, die Schlüssel in Deinen assoziativen Arrays eindeutig zu halten, um Verwechslungen zu vermeiden.
  • Die Verwendung von VBA-Add-Ins kann Deinen Code optimieren und die Verwaltung von Arrays erleichtern.
  • Überlege, ob Du ein UserForm erstellen möchtest, um die Daten interaktiv zu bearbeiten.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen einer Collection und einem Dictionary in VBA? Eine Collection ist einfacher zu verwenden, während ein Dictionary mehr Funktionen bietet, wie z.B. die Möglichkeit, nicht-stringbasierte Schlüssel zu verwenden.

2. Kann ich ein assoziatives Array in Excel VBA in einer UserForm verwenden? Ja, Du kannst sowohl Collections als auch Dictionaries in UserForms verwenden, um Daten dynamisch zu verwalten.

3. Wie kann ich ein assoziatives Array in einer Schleife durchlaufen? Du kannst eine Schleife verwenden, um durch die Schlüssel einer Collection oder die Items eines Dictionaries zu iterieren. Hier ein Beispiel mit einem Dictionary:

Dim key As Variant
For Each key In dict.Keys
    MsgBox key & ": " & dict(key)
Next key

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige