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

Forumthread: Daten aus mehreren Tabellenblättern zusammenführen

Daten aus mehreren Tabellenblättern zusammenführen
04.06.2013 15:02:38
Kitsune
Hallo zusammen,
nachdem mein unter https://www.herber.de/forum/messages/1316004.html gestelltes Problem erfolgreich gelöst wurde und ich das Skript vom Beispiel ebenso erfolgreich in meine "große" Tabelle implementiert habe, stehe ich vor dem nächsten Problem:
ich mache die Einsatzplanung für jeden Tag der Woche in einem eigenen Tabellenblatt. Jetzt möchte ich in der Zusammenfassung gerne auch die Arbeitszeiten aus den verschiedenen Wochentagstabellenblättern zusammengeführt haben. Also zuerst der Name des Mitarbeiters, dann Arbeitszeit und Pausen von Montag, in den nächsten Spalten daneben die Zeiten von Dienstag undsoweiter. Naiv wie ich bin, dachte mir, einfach das Ganze ab "With Sheets(...)" für die weiteren Tabellenblättern mit angepassten Ausgangsspalten noch ein paar mal durchlaufen zu lassen. Aber dann kommen die Zeiten für die folgenden Tagen zwar in den richtigen Spalten raus, die Ausgabenzeilen gehen aber da weiter, wo die Ausgabe vom vorherigen Tabellenblatt aufhörte (also ganz unten, nach dem letzten Namen der Liste).
Mein Lösungsansatz war, dass ich die Ausgabenzeilenposition beim zweiten (und weiteren) Durchgang "resetten" muss, habe aber keinen Schimmer, wie ich das hinbekomme.
Ich hatte auch mal versucht, die Zusammenfassung der Wochentage in jeweils ein Sub zu stecken und die dann in einer Sammel-Sub nacheinander aufzurufen, das schien aber auch nicht die Lösung zu sein.
Anbei noch die Mustertabelle, mit dem von Klaus M.vdT. erstellten Skript. Im Tabellenblatt "Zusammenfassung" ist dann auch zu sehen, wo die Daten am Ende raus kommen sollen.
https://www.herber.de/bbs/user/85648.xls

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus mehreren Tabellenblättern zusammenführen
04.06.2013 15:33:22
Klaus
Hi Kitsune,
da muss ich nur 4 Zeilen ändern! Datei anbei, starte das Makro "ProTag".
https://www.herber.de/bbs/user/85650.xlsm
Anmerkung1:
du wusstest doch von Anfang an dass das ein Teil der Aufgabe ist, oder? Wenn du deine Fragen gleich korrekt stellst, bekommst du auch gleich korrekte Scripte ;-P so ist jetzt, wegen 4 Zeilen, deine wertvolle Zeit verloren gegangen.
Anmerkung2:
deine Datei 85648.xls konnte ich aus irgendeinem Grund nicht laden, darum habe ich die "alte" Musterdatei auf Montag + Dienstag ausgeweitet. Die Logik ist klar, auf Mittwoch-Sonntag bekommst du das alleine hin :-)
Anmerkung3:
den kleinen Schönheitsfehler mit den End-Zeiten (vgl alter Beitrag) habe ich bei der Gelegenheit gleich mitkorrigiert!
Grüße,
Klaus M.vdT.

Anzeige
AW: Daten aus mehreren Tabellenblättern zusammenführen
04.06.2013 16:05:12
Kitsune
Hallo Klaus,
knapp daneben, aber eben leider vorbei ;) Wie ich ja geschrieben habe, dass ich die Zeiten aus den anderen Tagen darunter reinbekomme, das habe ich ja auch geschafft. Mein Ziel ist ja, die Zeiten der folgenden Tage in die Spalten neben die Zeiten von Montag aufzufüllen. Das Auffüllen soll also wieder in der obersten Zeile anfangen, das erneute Schreiben der Mitarbeiternamen entfällt dann.
Zu Anmerkung 1: ja, hast ja recht. Im Übereifer ging ich davon aus, dass ich das dann auch selber hinkriege. Wie man sieht: Pustekuchen! Ganz verschwendet war die Zeit für mich persönlich aber nicht, ich hab jede Menge Neues gelernt.
Zu Anmerkung 2: nochmal meine Beispieldatei, diesmal als xlsm, vielleicht bringt das ja was.

Die Datei https://www.herber.de/bbs/user/85651.xlsm wurde aus Datenschutzgründen gelöscht


Hab heute allerdings auch Probleme mit der Internetverbindung, evtl. gab's Probleme beim Upload.
Schönen Gruß zurück,
kit

Anzeige
AW: Daten aus mehreren Tabellenblättern zusammenführen
04.06.2013 17:28:58
Klaus
Hi Kit,
ich hab grad kein Excel zur Hand, schreibe vom Netbook.
die Listen neben statt untereinander zu schreiben müsste irgendwie gehen. Dafür muss ich aber die gesamte Logik des Programms einmal wieder aufdröseln - die Teile "Namen schreiben" und "Zeilen schreiben" laufen ja bisher innerhalb von einer Schleife ab, wenn du diese Aufgaben aufdröselst muss der Programmablauf sich sehr ändern.
Ein paar Fragen ergeben sich für mich (untereineander schreiben ist SO viel einfacher :-) )
Wenn Hans in der Montag-Tabelle in Zeile 4 steht, Dienstag das Silberbesteck klaut und Donnerstag gefeuert wird, was steht dann in der Freitag-Tabelle in Zeile 4? Müssen die Namen innerhalb der Tabellen auf Stimmigkeit überprüft werden, bevor die Zeiten geschrieben werden oder sind die garantiert immer und fehlerfrei in den korrekten Zeilen?
Wenn du eine Prüfung brauchst, was machst du mit Dopplern? Ein "Ignaz Rigstepski" wird kein Problem sein, aber es heissen schnell mal zwei Kollegen "Hans Müller" (auch wenn das jetzt noch nicht vorkommt, wie wird damit umgegangen WENN das vorkommt?).
Sind alle Namen in der Montag-Liste vorhanden? Oder kann es sein, dass Mittwoch ein neuer Name dazu kommt den es vorher noch nicht gab?
Ich schau mir deine Datei morgen an!
Grüße,
Klaus M.vdT.

Anzeige
AW: Daten aus mehreren Tabellenblättern zusammenführen
05.06.2013 08:02:17
Kitsune
Hallo Klaus,
die Namen in den folgenden Wochentagsblättern werden alle vom Montagsblatt übernommen, da ändert sich unter der Woche nix. Ich plane auch so, dass bei jedem Namen jeden Tag etwas eingetragen ist und sei es "Freizeit", "Urlaub" oder sonst was. Es sollte also für die ganze Woche immer die gleichen Namen geben für die immer etwas eingetragen ist.
Wenn einer mitten in der Woche sich unerwartet verabschiedet (warum auch immer), ist das für die Zusammenfassung nicht relevant, es geht hier um die Wochenplanung, die mindestens zwei Wochen im Voraus gemacht wird.
Danke schon mal!
kit

Anzeige
gelöst
05.06.2013 08:33:35
Klaus
Hi,
alle Wünsche erfüllt hoffe ich :-)
https://www.herber.de/bbs/user/85660.xlsm
Damits nicht einfach die pfannenfertige Lösung ist und der stille Mitleser noch etwas lernt, hier mal in kürze die Änderungen:

Sub AlleTage()
ErsterDurchlauf = True
Call ÜbersichtErstellen("Montag", 2, 3)
Call ÜbersichtErstellen("Dienstag", 4, 5)
Call ÜbersichtErstellen("Mittwoch", 6, 7)
End Sub
Sub ÜbersichtErstellen(EingabeBlatt As String, ColAusgabeArbeit As Long, ColAusgabePause As Long)
Das Sub "AlleTage" ruft das ausführende Sub "Übersicht erstellen" wiederholt auf. Die Definition der Ausgabe-Spalten sowie des Input-Blattes habe ich in das CALL geholt!
Da die Namen nur einmal geschrieben werden müssen, dies aber leider bereits im Sub verankert ist, hätte ich die Namen-schreiben Prozedur komplett herausfiletieren müssen und einmal seperat aufrufen. Dazu war ich aber zu faul :-) Daher gibt es eine globale boolean-Variable, die beim ersten Call TRUE ist:
Public ErsterDurchlauf As Boolean
Sub AlleTage()
ErsterDurchlauf = True
Call ÜbersichtErstellen("Montag", 2, 3)
End Sub
Sub ÜbersichtErstellen(...)
With Sheets(AusgabeBlatt)
'Namen schreiben
If ErsterDurchlauf Then .Cells(RowAusgabeLast, ColAusgabeName).Value = r.Value
End With

nach dem ersten Durchlauf wird die Variable auf FALSE gesetzte (ganz unten im Makro). Dadurch werden ab Dienstag einfach keine Namen mehr in die Zusammenfassung geschrieben.
Das Problem, dass die Zeiten in Blöcken immer weiter runter geschrieben wurden, lag hieran:

With Sheets(AusgabeBlatt)
'letzte Zeile feststellen
RowAusgabeLast = .Cells(.Rows.Count, ColAusgabeNamen).End(xlUp).Row + 1

Es suchte sich immer in der Namens-Spalte die nächste freie Zeile. Kleine Logikänderung:

With Sheets(AusgabeBlatt)
'letzte Zeile feststellen
RowAusgabeLast = .Cells(.Rows.Count, ColAusgabeArbeit).End(xlUp).Row + 1

Und auch das klappt wieder!
Anmerkung:
in "Zusammenfassung" hast du in Zeile 1 verbundene Zellen gehabt. Ich predige immer gerne, dass verbundene Zellen NIE einen Nutzen haben und IMMER Probleme Verursachen *), daher habe ich die herausgeschmissen! Du wirst in der Datei sehen, dass die Wochentage immer noch mittig über ihrem Bereich stehen wie vorher. Zauberei? Nein, rechtsclick-ZellenFormatiern-HorizontalÜberAuswahlZentrieren!
Grüße,
Klaus M.vdT.
*) Disclaimer Verbundzellen: Ausnahme HTML-gerechte Tabellenumwandlung sowie Namensmanager-Matrixformeln der zweiten Matrixebene. Wenn ich das nicht schreibe, schimpft Luc mit mir

Anzeige
etwas Offtopic: ich finde das unübersichtlich ...
05.06.2013 08:51:54
Klaus
Hallo Kitsune,
natürlich musst DU wissen wie deine Dateien aussehen sollen, aber ich finde deine Lösung unübersichtlich.
ICH hätte es ja so gelöst wie mein erstes Script in diesem Thread (Namen / Tage untereinander) und danach einen Autofilter gesetzt.
Wenn jetzt Hans Müller kommt und fragt "wie arbeite ich die Woche?", dann filterst du die Spalte "Namen" nach "Hans Müller" und erhälst die Wochenarbeit+Pausenliste für Hans.
Kommt danach der Chef und fragt "wie arbeiten die Jungs am Mittwoch?", dann filterst du die Wochentags-Spalte nach Mittwoch und hast die Tagesübersicht.
Easy, schnell, zwei Mausclicks, kein Makro.
In deiner Favorisierten Lösung sähen die Szenarien so aus:
Hans fragt "Wie arbeite ich die Woche?". Du blendest alles ausser Hans aus, und erhälst eine Übersicht in Form eines langen horizontalen Streifens ....
Chef fragt "Wie isses Mittwoch?". Du musst umständlich alle Spalten vor und nach Mittwoch ausblenden, um eine Übersicht zu erhalten.
Aber wie gesagt: Du kennst die Anforderungen an deine Übersicht besser. Das oben sind nur meine zwei cent
Grüße,
Klaus M.vdT.

Anzeige
AW: gelöst
05.06.2013 15:28:01
Kitsune
Wunderbar! Hab es in jetzt auch in die große Tabelle implementiert und er spuckt brav alle Zeiten nebeneinander aus. Vielen, vielen Dank!
Einziges Problem war noch: das Skript übernimmt offensichtlich Leute nicht, die keine Pause haben (soll's auch geben)! Ich hatte mich schon gewundert, wieso einige Leute in der Zusammenfassung nicht auftauchen, bis mir das auffiel. Habe das Problem wie folgt gelöst:
'Pausen schreiben
If ZeitPause = "" Then
.Cells(RowAusgabeLast, ColAusgabePause).Value = "-"
Else
.Cells(RowAusgabeLast, ColAusgabePause).Value = ZeitPause
End If
Vielen Dank und sonnige Grüße!
kit

Anzeige
Danke für die Rückmeldung! mit Text
05.06.2013 15:51:09
Klaus
Hi Kitsune,
bezüglich der Pausenzeiten habe ich einen Verdacht .. an einer Stelle prüfe ich auf leere Zellen, warscheinlich überspringt er dort die nicht-Pausler. Ich tauche da jetzt aber nicht wieder ein, diese Kleinigkeit hast du ja selbst gelöst bekommen!
bzgl. "brav nebeneinander" habe ich dir einen weiter oben meine Meinung geschrieben. Wenns dir so passt wie es jetzt ist, dann ist alles gut :-)
Grüße und freut mich geholfen zu haben,
Klaus M.vdT.
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Daten aus mehreren Tabellenblättern zusammenführen


Schritt-für-Schritt-Anleitung

Um Daten aus mehreren Tabellenblättern in Excel zusammenzuführen, kannst du ein Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und erstelle eine neue Arbeitsmappe oder öffne deine bestehende Datei mit den Tabellenblättern.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deine Datei)", wähle "Einfügen" und dann "Modul".

  4. Kopiere und füge den folgenden Code ein:

    Public ErsterDurchlauf As Boolean
    
    Sub AlleTage()
        ErsterDurchlauf = True
        Call ÜbersichtErstellen("Montag", 2, 3)
        Call ÜbersichtErstellen("Dienstag", 4, 5)
        Call ÜbersichtErstellen("Mittwoch", 6, 7)
        ' Füge hier weitere Tage hinzu
    End Sub
    
    Sub ÜbersichtErstellen(EingabeBlatt As String, ColAusgabeArbeit As Long, ColAusgabePause As Long)
        With Sheets(EingabeBlatt)
            Dim RowAusgabeLast As Long
            RowAusgabeLast = .Cells(.Rows.Count, ColAusgabeArbeit).End(xlUp).Row + 1
    
            ' Namen schreiben
            If ErsterDurchlauf Then
                .Cells(RowAusgabeLast, ColAusgabeName).Value = r.Value
            End If
        End With
    End Sub
  5. Führe das Makro aus: Kehre zu Excel zurück, drücke ALT + F8, wähle AlleTage aus und klicke auf "Ausführen".

Das Makro wird nun die Arbeitszeiten aus den verschiedenen Wochentagstabellen in die Zusammenfassung übertragen.


Häufige Fehler und Lösungen

  • Fehler: Die Daten werden untereinander statt nebeneinander geschrieben.

    • Lösung: Stelle sicher, dass die Zeilenposition für die Ausgabe korrekt gesetzt ist. Anstelle der Namens-Spalte sollte die Arbeitszeiten-Spalte verwendet werden.
  • Fehler: Einige Mitarbeiter erscheinen nicht in der Zusammenfassung.

    • Lösung: Überprüfe, ob bei diesen Mitarbeitern tatsächlich eine Pause eingetragen wurde. Verwende den Code, um sicherzustellen, dass bei fehlender Pause ein Platzhalter wie "-" eingetragen wird.

Alternative Methoden

Falls du kein Makro verwenden möchtest, gibt es auch alternative Methoden, um Daten aus mehreren Tabellenblättern zusammenzuführen:

  1. Verwende die Funktion VERKETTEN: Damit kannst du Inhalte aus mehreren Zellen und Blättern zusammenfügen.
  2. Nutze Pivot-Tabellen: Wenn die Daten nach bestimmten Kriterien aggregiert werden sollen, kann eine Pivot-Tabelle eine Übersicht über die Arbeitszeiten schaffen.
  3. Power Query: In neueren Excel-Versionen kannst du Power Query verwenden, um Daten aus verschiedenen Blättern zusammenzuführen und zu transformieren.

Praktische Beispiele

  • Beispiel 1: Wenn du die Arbeitszeiten von Montag, Dienstag und Mittwoch hast, kannst du mit dem obigen Makro die Zeiten nebeneinander auflisten, sodass jeder Mitarbeiter in einer Zeile mit den entsprechenden Zeiten in den Spalten erscheint.

  • Beispiel 2: Wenn du eine Übersicht über die Arbeitszeiten aller Mitarbeiter für eine Woche erstellen möchtest, kannst du die Funktion INDEX und VERGLEICH nutzen, um die passenden Zeiten aus den verschiedenen Blättern zusammenzustellen.


Tipps für Profis

  • Verwende benannte Bereiche: Dies erleichtert die Lesbarkeit deines Codes und ermöglicht eine einfachere Anpassung, wenn sich die Struktur deiner Daten ändert.
  • Optimiere dein Makro: Reduziere die Anzahl der Bildschirmaktualisierungen mit Application.ScreenUpdating = False am Anfang und Application.ScreenUpdating = True am Ende deines Makros.
  • Dokumentation: Kommentiere deinen Code gut, um zukünftige Anpassungen zu erleichtern und anderen Nutzern das Verständnis zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Excel-Dateien automatisch zusammenführen?
Verwende Power Query oder VBA, um Daten aus mehreren Dateien zu importieren und zusammenzuführen.

2. Funktioniert dieses Makro in allen Excel-Versionen?
Ja, die oben beschriebenen Methoden und Makros sollten in den meisten modernen Excel-Versionen funktionieren (Excel 2010 und neuer).

3. Wie gehe ich mit fehlenden Daten in den Tabellen um?
Du kannst die Logik in deinem Makro anpassen, um leere Zellen zu überprüfen und Platzhalter zu setzen, sodass die Übersicht vollständig bleibt.

4. Kann ich auch andere Datenformatierungen übernehmen?
Ja, du kannst die Formatierungsoptionen in deinem Makro anpassen, um sicherzustellen, dass die Zielzellen die gewünschten Formatierungen beibehalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige