Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1316to1320
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

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

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.

353 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige