Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Array in Dictionary erstellen

Array in Dictionary erstellen
21.08.2021 21:29:34
SchubertFranzl
Hallo
ich würde gerne ein Array direkt in ein Dictionary eintragen, dieses direkt befüllen und direkt abfragen, was mir aber nicht gelingt.
Es soll so gehen, wie man auch ein Dictionary direkt eintragen kann.
Damit man besser versteht, was ich meine:
Hier ein Beispiel, in dem gezeigt wird, wie es mit einem Dictionary geht und dann gezeigt wird, dass es mit einm Array nicht geht.

Sub Beispiel()
Dim Verzeichnis As Object
Dim Raster As Variant
ReDim Raster(8 To 100, 1 To 20)
Set Verzeichnis = CreateObject("Scripting.Dictionary")
'Im Verzeichnis wird ein Dictionary erstellt
Verzeichnis.Add "Montag", CreateObject("Scripting.Dictionary")  'Key:="Montag",  Item:=Neues Dictionary
'In diesem wird ein Eintrag hinzugefügt und dann abgerufen.
Verzeichnis("Montag").Add "Umsatz", "Erdbeere"  'Key:="Umsatz",  Item:="Erdbeere"
Debug.Print Verzeichnis("Montag")("Umsatz")  'liefert "Erdbeere"
With Verzeichnis("Montag")
Debug.Print .Item("Umsatz")               'liefert "Erdbeere"
End With
'Im Verzeichnis soll ein leeres Array erstellt werden, weiß aber nicht, wie.
'Habe deshalb ein bestehendes Array eingefügt,
Verzeichnis.Add "Tabelle", Raster
'In dieses Array soll etwas eingetragen werden
Verzeichnis("Tabelle")(50, 15) = "Rosine"
'Der Abruf liefert nicht das gewünschte Ergebnis
Debug.Print Verzeichnis("Tabelle")(50, 15)   'liefert nix
With Verzeichnis("Tabelle")
Debug.Print .Item(50, 15)        'liefert einen Fehler
End With
End Sub
Könnt Ihr mir helfen und sagen, warum das nicht geht und wie es ginge?
LG, Franz
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Lade die Scripting.Runtime, ...
22.08.2021 01:29:08
Luc:-?
…Franz,
dann unterstützt der VBE-Intellisense deine Bemühungen! Prinzipiell lassen sich auch ganze Arrays unter einem Key als Item hinzufügen, auf gleiche Weise wie Einzelwerte. Aber wenn das hier nicht der Fall ist, hast du es falsch gemacht (dein EingabeVersuch ist mir suspekt und entspricht nicht der Norm). Ohnehin empfehle ich hier eher Tensoren als klassische mehrdimensionale VBA-Arrays.
Morhn, Luc :-?
Anzeige
AW: Array in Dictionary erstellen
22.08.2021 14:51:50
Zwenn
Hallo Franz,
mir ist nicht ganz klar, warum Du unbedingt ein Array verwenden willst, wenn Du es mit einem Dictionary schon hinbekommst. Nutze doch für ein Dict in Dict einfach Keys ab 0 und dann hochzählen. Das ist dann (ähnlich) wie ein Array, nur unkompliziert dynamisch. Solange diese Art der dynamischen Speicherstruktur nicht exorbitant viele Einträge erhält (im Mio. Bereich), funktioniert das auch von der Geschwindigkeit her gut.
Sollen es unbedingt die Arrays sein, dann hilft Dir vielleicht dieser Thread weiter. Ist zwar schon älter, aber das sollte egal sein. Daniel erklärt da Eingangs einiges und später führt Trägheit weiteres aus:
http://www.office-loesung.de/ftopic606131_0_0_asc.php
Viele Grüße,
Zwenn
Anzeige
AW: Array in Dictionary erstellen
22.08.2021 20:15:18
SchubertFranzl
Offensichtlich muss man das Array herausziehen, damit man was eintragen kann. Und dann wieder zurückstellen.
Warum Arrays? Weil ich die schnell in ein Range in einem Sheet kopieren kann. Erst sammelt das Makro verschiedene Werte und trägt sie in Arrays ein. Die ca. 10000 Werte sind Strings und kommen aus einer Liste, die vom Anwender kunterbunt befüllt wurde. Die Einordnung in die Arrrays erfolgt im Makro daher stückweise.
Und wenn der User dann eine bestimmte Übersicht will, kann ich gleich das entsprechende Array reinstellen. Zugegeben, das Erstellen der Arrays dauert ein paar Sekunden, also eine Ewigkeit.
Eine andere Möglichkeit, die ich noch nicht ausprobiert habe, wäre vielleicht, Zeilendictionaries in Spaltendictionaries zu erstellen, die jeweils durchnummerierte Keys haben, und diese dann stückweise zu befüllen, so wie Du es bereits angeregt hast. Nur: Wie bringe ich die dann in das Sheet? Gibt es da eine schnelle Möglichkeit?
LG, Franz
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Array in Dictionary erstellen und verwenden


Schritt-für-Schritt-Anleitung

Um ein Array in ein Dictionary in VBA zu integrieren, musst Du einige Schritte befolgen. Hier ist eine einfache Anleitung, wie Du dies umsetzen kannst:

  1. Dictionary erstellen: Beginne mit der Erstellung eines Dictionaries, indem Du CreateObject("Scripting.Dictionary") verwendest.
  2. Array definieren: Erstelle ein Array mit Dim und ReDim, um die benötigten Dimensionen festzulegen.
  3. Eintrag ins Dictionary: Füge das Array als Item in das Dictionary ein.
  4. Zugriff auf Array-Elemente: Um auf die Elemente des Arrays zuzugreifen, musst Du sicherstellen, dass das Array korrekt referenziert wird.

Hier ein Beispielcode:

Sub Beispiel()
    Dim Verzeichnis As Object
    Dim Raster As Variant
    ReDim Raster(8 To 100, 1 To 20)
    Set Verzeichnis = CreateObject("Scripting.Dictionary")

    ' Füge ein Dictionary hinzu
    Verzeichnis.Add "Montag", CreateObject("Scripting.Dictionary")
    Verzeichnis("Montag").Add "Umsatz", "Erdbeere"

    ' Füge ein Array hinzu
    Verzeichnis.Add "Tabelle", Raster

    ' Zugriff auf Array-Elemente
    Verzeichnis("Tabelle")(50, 15) = "Rosine"
    Debug.Print Verzeichnis("Tabelle")(50, 15)  ' sollte "Rosine" ausgeben
End Sub

Häufige Fehler und Lösungen

Hier sind einige häufige Fehler, die beim Arbeiten mit vba dictionary und Arrays auftreten können, sowie deren Lösungen:

  • Fehler beim Zugriff auf Array-Elemente: Wenn Du versuchst, auf ein Element des Arrays zuzugreifen, das als Item im Dictionary gespeichert ist, könnte dies zu einem Fehler führen. Stelle sicher, dass das Array korrekt referenziert wird.

  • Dictionary nicht korrekt initialisiert: Wenn das Dictionary nicht richtig initialisiert wurde, kann es zu Laufzeitfehlern kommen. Verwende Set Verzeichnis = CreateObject("Scripting.Dictionary"), um sicherzustellen, dass das Dictionary korrekt erstellt wird.


Alternative Methoden

Wenn Du ein vba dictionary nicht verwenden möchtest, gibt es alternative Methoden, um ähnliche Strukturen zu erstellen:

  • VBA Array of Dictionaries: Statt ein Array in einem Dictionary zu speichern, kannst Du ein Array von Dictionaries erstellen. Dies ermöglicht ähnliche Funktionalitäten, ohne die Komplexität, die mit mehrdimensionalen Arrays verbunden ist.
Dim dictArray() As Object
ReDim dictArray(1 To 10)

For i = 1 To 10
    Set dictArray(i) = CreateObject("Scripting.Dictionary")
    dictArray(i).Add "Key", "Value" & i
Next i

Praktische Beispiele

Hier sind einige praktische Anwendungen des vba dictionary mit Arrays:

  1. Eingabewerte sammeln: Du kannst Werte in einem Array sammeln und sie anschließend in einem Dictionary speichern, um die Daten dynamisch zu verwalten.

  2. Datenverarbeitung in Excel: Du kannst die gesammelten Daten direkt in ein Excel-Sheet übertragen, was die Arbeit mit großen Datenmengen erleichtert.

Sub DatenInSheetÜbertragen()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Daten")

    Dim i As Integer
    For i = LBound(Raster, 1) To UBound(Raster, 1)
        ws.Cells(i, 1).Value = Raster(i, 1)
    Next i
End Sub

Tipps für Profis

  • Verwende Debug.Print: Nutze Debug.Print, um den Inhalt von Dictionaries oder Arrays während der Entwicklung zu überprüfen.
  • Vermeide zu viele Dimensionen: Halte die Struktur einfach. Zu viele Dimensionen in Arrays können den Code unübersichtlich machen.
  • Nutze Scripting.Dictionary effektiv: Verstehe die Methoden von Scripting.Dictionary, um Schlüssel und Werte effizient zu verwalten.

FAQ: Häufige Fragen

1. Wie kann ich ein mehrdimensionales Array im Dictionary speichern?
Du kannst ein mehrdimensionales Array im Dictionary speichern, indem Du es direkt als Item hinzufügst. Stelle sicher, dass Du bei der Referenzierung die Dimensionen korrekt angibst.

2. Was ist der Vorteil eines Dictionaries gegenüber einem Array?
Ein Dictionary ermöglicht es, Schlüssel-Wert-Paare zu speichern, die dynamisch hinzugefügt oder entfernt werden können, was bei Arrays nicht so einfach ist. Dies macht Dictionaries flexibler für Datenmanagement.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige