Excel VBA drei Tabellen verknüpfen mit Scripting.Dictionary
Hallo zusammen,
ich bin das erste mal in diesem Forum und hoffe, es kann mir jemand bei meinem Problem weiterhelfen.
Das Problem:
Ich habe Daten in drei Tabellen aus welchen ich eine Übersicht bzw. einen Auszug in einer vierten Tabelle erstellen will.
Datenquellen:
"TeilnehmerBausteine"
"Anwesenheit"
"Teilnehmer"
- Ergebnisliste:
"Beleg_Übersicht"
Die ersten drei Tabellen stellen die Quelle für die vierte Tabelle dar wie im Beispiel. Ein wenig kenne ich Scripting.Dictionary schon und kann es auf einen Auszug aus einer Tabelle anwenden - doch geht das irgend wie auch in meinem Fall mit drei Tabellen oder gibt es vielleicht eine andere relativ schnelle Lösung?
Ich hoffe, die Tabellen können meine Vorstellung einigermaßen verständlich rüberbringen - ansonsten füge ich gerne noch zusätzliche Erklärungen bei.
Bis dahin
Andi
ich bin das erste mal in diesem Forum und hoffe, es kann mir jemand bei meinem Problem weiterhelfen.
Das Problem:
Ich habe Daten in drei Tabellen aus welchen ich eine Übersicht bzw. einen Auszug in einer vierten Tabelle erstellen will.
Datenquellen:
"TeilnehmerBausteine"
"Anwesenheit"
"Teilnehmer"
- Ergebnisliste:
"Beleg_Übersicht"
Die ersten drei Tabellen stellen die Quelle für die vierte Tabelle dar wie im Beispiel. Ein wenig kenne ich Scripting.Dictionary schon und kann es auf einen Auszug aus einer Tabelle anwenden - doch geht das irgend wie auch in meinem Fall mit drei Tabellen oder gibt es vielleicht eine andere relativ schnelle Lösung?
Ich hoffe, die Tabellen können meine Vorstellung einigermaßen verständlich rüberbringen - ansonsten füge ich gerne noch zusätzliche Erklärungen bei.
Bis dahin
Andi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 172046
Url: https://administrator.de/forum/excel-vba-drei-tabellen-verknuepfen-mit-scripting-dictionary-172046.html
Ausgedruckt am: 22.04.2025 um 09:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo AndiDomme und willkommen im Forum!
Den Hinweis "Verwende eine Datenbank!" spare ich mir gleich mal ...
Da Du ja in allen Tabellen die "Kd.-Nr" als Schlüssel zur Verfügung hast, könntest Du diese einfach dazu verwenden, die zugeordnete Zeilennummer der Zieltabelle als Wert im "
Grüße
bastla
Den Hinweis "Verwende eine Datenbank!" spare ich mir gleich mal ...
Da Du ja in allen Tabellen die "Kd.-Nr" als Schlüssel zur Verfügung hast, könntest Du diese einfach dazu verwenden, die zugeordnete Zeilennummer der Zieltabelle als Wert im "
Dictionary
" zu speichern - wenn Du dann jeweils sofort die Daten in die Zieltabelle überträgst, kannst Du ja zB per "InStr()
" abfragen, ob der neue Wert (zB "E01") bereits in der entsprechenden Spalte enthalten ist ...Grüße
bastla
[OT]
Ich sach' ma' so:
Falls dein Cheffe das jetzt zufällig mitliest, dann könnte ihm die idee kommen, dass selbst eine legal lizenzierte Microsoft-Datenbank um das 5000fache kostengünstiger wäre als eine Handvoll Mitarbeiter, die jeden gatesverdammten Arbeitstach ein paar Stunden lang versuchen, eine Datenbank mit Excel zu simulieren.
Grüße
Biber
[/OT]
Zitat von @AndiDomme:
das mit der Datenbank ist eigentlich völlig richtig - nur dürfen wir bei uns leider keine Datenbankanwendungen
"zusammenschustern" bzw. benutzen. Aus diesem grunde habe ich ein Excel-Tool gebaut,
welches mittlerweile über 100 Sheets und ca. 60 UserForms hat.
das mit der Datenbank ist eigentlich völlig richtig - nur dürfen wir bei uns leider keine Datenbankanwendungen
"zusammenschustern" bzw. benutzen. Aus diesem grunde habe ich ein Excel-Tool gebaut,
welches mittlerweile über 100 Sheets und ca. 60 UserForms hat.
Ich sach' ma' so:
Falls dein Cheffe das jetzt zufällig mitliest, dann könnte ihm die idee kommen, dass selbst eine legal lizenzierte Microsoft-Datenbank um das 5000fache kostengünstiger wäre als eine Handvoll Mitarbeiter, die jeden gatesverdammten Arbeitstach ein paar Stunden lang versuchen, eine Datenbank mit Excel zu simulieren.
Grüße
Biber
[/OT]
Hallo AndiDomme!
Die Idee wäre in etwa folgende: Ausgangspunkt ist natürlich die Teilnehmertabelle - wenn Du diese zeilenweise verarbeitest und daraus die Zusammenfassungstabelle (Spalten A bis C) aufbaust, kannst Du im Dictionary zur "Kd.-NR" als Key die Zeilennummer der Zusammenfassungstabelle als Wert hinterlegen.
Wenn Du im nächsten Schritt die "TeilnehmerBausteine" zeilenweise durchgehst, kannst Du anhand der "Kd.-Nr" aus dem Dictionary die zugehörige Zeile auslesen und prüfen, ob in der Spalte D der Zieltabelle bereits ein entsprechender Eintrag existiert (sollte ja eigentlich für die belegten Bausteine ohnehin nicht der Fall sein) - etwa so:
wobei "Zeilennr" und "Baustein" Variablen sein sollen, deren Werte Du vorher ausgelesen / ermittelt hast.
Bei dieser Prüfung wäre ggf zu berücksichtigen, dass Teilstrings verglichen werden - "E01" wäre natürlich in "E010" enthalten und würde nicht eingetragen werden - konsistente Kürzel (immer gleiche Stellenanzahl) und Sortierung der Quell-Tabelle sollten diesem Problem aber vorbeugen können ...
Die restlichen Spalten sind dann anhand des "Ja" bzw überhaupt eines Eintrages (Note) in der "Anwesenheitstabelle" leicht zu befüllen ...
Grüße
bastla
Die Idee wäre in etwa folgende: Ausgangspunkt ist natürlich die Teilnehmertabelle - wenn Du diese zeilenweise verarbeitest und daraus die Zusammenfassungstabelle (Spalten A bis C) aufbaust, kannst Du im Dictionary zur "Kd.-NR" als Key die Zeilennummer der Zusammenfassungstabelle als Wert hinterlegen.
Wenn Du im nächsten Schritt die "TeilnehmerBausteine" zeilenweise durchgehst, kannst Du anhand der "Kd.-Nr" aus dem Dictionary die zugehörige Zeile auslesen und prüfen, ob in der Spalte D der Zieltabelle bereits ein entsprechender Eintrag existiert (sollte ja eigentlich für die belegten Bausteine ohnehin nicht der Fall sein) - etwa so:
If InStr(Cells(Zeilennr, "D").Value, Baustein) = 0 Then Cells(Zeilennr, "D").Value = Cells(Zeilennr, "D").Value & " ," & Baustein
Bei dieser Prüfung wäre ggf zu berücksichtigen, dass Teilstrings verglichen werden - "E01" wäre natürlich in "E010" enthalten und würde nicht eingetragen werden - konsistente Kürzel (immer gleiche Stellenanzahl) und Sortierung der Quell-Tabelle sollten diesem Problem aber vorbeugen können ...
Die restlichen Spalten sind dann anhand des "Ja" bzw überhaupt eines Eintrages (Note) in der "Anwesenheitstabelle" leicht zu befüllen ...
Grüße
bastla