Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dictionary: Value als Dictionary

Dictionary: Value als Dictionary
04.02.2022 00:39:22
dira
Hallo,
ich möchte ein Dictionary benutzen, dessen values wiederum Dictionary-Objekte sind. Soetwas in der Art:
Key = Monat
Value = (Key = Jahr, Value = irgendeine Zahl)

Dim dict As New Scripting.Dictionary 'Key = Monat, Value = [Key = Jahr, Value = Wert]
Dim value As New Scripting.Dictionary
Dim value2 As New Scripting.Dictionary
Public Sub test() value.Add key:=2021, Item:=123 dict.Add key:=5, Item:=value 'jetzt sollte in dict folgendes stehen: Key1 = 5, Value1 = (Key2 = 2021, Value2 = 123) Set value2 = dict(5) value2(2021) = value2(2021) + 5 'jetzt sollte in dict folgendes stehen: Key1 = 5, Value1 = (Key2 = 2021, Value2 = 128); tut es aber nicht... End Sub
Kann mir bitte jemand erklären, wie ich bei einem Dictionary, dessen values wiederum Dictionary-Objekte sind, diese values befüllen, lesen und verändern kann.
Vielen lieben Dank,
Dirk

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

Betreff
Datum
Anwender
Anzeige
AW: Dictionary: Value als Dictionary
04.02.2022 06:46:56
ralf_b
vielleicht ist deine Dictionary Idee ja nicht so optimal für das was du vorhast. Was willst du damit erreichen?
AW: Dictionary: Value als Dictionary
04.02.2022 08:06:59
Daniel
Hi
Wenn du das innere Dictionary verändern willst, musst du es erst in ein eigenes Dictionary auslesen, dieses verändern und dann zurückschreiben.
Wenn es noch nicht vorhanden ist, musst du es neu erstellen, in etwa so:

If dic1.exists("ABC") then
set dic2 = dic1("ABC")
Else
Set dic2 = createobject("scripting.Dictionary")
End if
dic2("XYZ") = 123
set dic1("ABC") = dic2
Gruß Daniel
AW: Dictionary: Value als Dictionary
04.02.2022 21:30:58
Zwenn
Hallo Dirk,
was Du haben möchtest sind nested Dictionaries. Also ineinander verschachtelte Dictionaries. Diese kannst Du beliebig tief erzeugen. Verwendet wird diese Datenstruktur, um Bäume aufzubauen.
https://de.wikipedia.org/wiki/Baum_(Datenstruktur)
Ich habe Dir ein kleines Beispiel programmiert, in dem Du sehen kannst, wie das funktionieren kann. Am Ende musst Du es natürlich auf Deine Bedürfnisse anwenden. Damit Du Dictionaries insgesamt besser verstehen kannst, empfehle ich den folgenden Link:
https://excelmacromastery.com/vba-dictionary/

Sub NestedDictionariesTest()
'Die Deklaration einer Variable zur Aufnahme
'eines Dictionaries reicht
'Da die nested Dictionaries mit Late Binding
'erstellt werden müssen, wird auch das erste
'als Object Variable deklariert
'(Kein setzen eines Verweises notwendig)
Dim dictRoot As Object
Dim monat As Long 'Zählvariable für Monats-Dictionaries-Erstell-Schleife
'Erstellen des ersten Dictionaries über Late Binding
Set dictRoot = CreateObject("Scripting.Dictionary")
'Wir erstellen 12 Dictionaries für die Monate
'Das machen wir in einer Schleife, in der in jedem
'Durchlauf ein neues Dictionary im Ausgangs-Dictionary
'erstellt wird
'Die Keys haben als Namen die Zahlen 1 bis 12
'Die Values sind leere Dictionaries
For monat = 1 To 12
Set dictRoot(monat) = CreateObject("Scripting.Dictionary")
Next monat
'Ab hier kann ein System entwickelt werden, über das
'weitere Dictionaries für die Jahre in den Dictionaries
'für die Monate erzeugt werden
'Als Anschauung zur Mechanik folgendes Beispiel:
'Anlegen eines Dictionaries für das Jahr 2012 (Key) im
'Dictionary für den Monat Juni
Set dictRoot(6)(2012) = CreateObject("Scripting.Dictionary")
'Value für das Jahr 2012 schreiben
dictRoot(6)(2012)("Wert") = 5
'Ausgeben des Wertes
MsgBox dictRoot(6)(2012)("Wert")
'Addieren eines Wertes zum bestehenden Wert
dictRoot(6)(2012)("Wert") = dictRoot(6)(2012)("Wert") + 4
'Ausgeben des neuen Wertes
MsgBox dictRoot(6)(2012)("Wert")
End Sub
Viele Grüße,
Zwenn
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige