Quelle: https://www.herber.de/cgi-bin/eachthread.pl?idx=1992819
Stand: 05.10.2024 22:00
Mehr zum Thema „Herber-Forum finden Sie hier.
Hier der Eröffnungsbeitrag aus dem Forum:
Hallo,
hoffe mir kann hier einer Helfen 🙂
Ich habe eine Excel Datei in der ich gern ein StartDatum und die Startzeit eines Auftrages eingeben würde in Spalte A. In Spalte B gebe ich die Auftragszeit in Minuten an.
Eine Ausgabe wann der Auftrag fertig ist soll in Spalte C erfolgen.
Ich abe eine Formel die das Ausrechnet aber leider nicht über 24 Stunden. Die Zeit wird Richtig angezeigt nur nicht das Datum das bleibt stehen.
Ich bitte um Info ob so was machbar ist.
Datei im Anhang
https://www.herber.de/bbs/user/172573.xlsm
Zugegeben, ich würde die Aufgabe auch per Plain Excel lösen, wie von diesem oder jenem Helfer im Thread vorgeschlagen. Meine Power Query-Beispiellösungen sollen in erster Linie ein Denkanstoß für PQ-Berechnungen mit Zeitangaben sein.
Die Musterdatei ist (wie so oft in xl-Foren) wieder ein Paradebeispiel für „so bitte nicht“. Es beginnt damit, dass das File als *.xlsm gespeichert wurde, obwohl kein Makro darin enthalten ist. 🙁
Ich musste die Datei auf einem besonders gesicherten Rechner herunterladen, der Sicherheit wegen…
Die Leerzeilen und leeren Spalten sind einfach ein echtes „NoGo“. Und die beiden Arbeitsblätter haben ja nun nicht wirklich viele Gemeinsamkeiten. Hier in diesem Beitrag beziehe ich mich mich auf das Arbeitsblatt DATUMZEIT, welches auch nach dem Aufruf der Mappe per Default aktiviert ist.
Wie schon angedeutet, biete ich Ihnen mehrere Lösungsvorschläge auf der Basis Power Query an. Dabei ist das Ergebnis stets gleich (und korrekt), der Weg zum Ziel aber dahingehend unterschiedlich, dass mit abnehmender Zahl der Arbeitsschritte der Grad des erforderlichen Vorwissens, prinzipiell der Schwierigkeitsgrad steigt.
Ausschließlich Mausklicks
Wie es die Zwischen-Überschrift schon aufzeigt, lässt sich das „Problem“ dadurch lösen, dass Sie keine einzige Formel eingeben müssen. Hier der entsprechende M-Code, der wegen dieser Vorgabe etwas umfangreicher ist:
let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type datetime}, {"Spalte2", type any}, {"Spalte3", Int64.Type}}),
#"Umbenannte Spalten" = Table.RenameColumns(#"Geänderter Typ",{{"Spalte1", "Start"}, {"Spalte3", "Dauer in Minuten"}}),
// Leere Spalten haben in einer ordentlichen Liste nichts zu suchen!
#"Entfernte Spalten" = Table.RemoveColumns(#"Umbenannte Spalten",{"Spalte2"}),
// So lassin sich die numerisch erfassten Minuten addieren
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Entfernte Spalten",{{"Start", type number}}),
#"Duplizierte Spalte" = Table.DuplicateColumn(#"Geänderter Typ1", "Dauer in Minuten", "Dauer in Minuten - Kopie"),
#"Umbenannte Spalten1" = Table.RenameColumns(#"Duplizierte Spalte",{{"Dauer in Minuten - Kopie", "Dauer in Minuten - dezimal"}}),
// 24 (Stunden je Tag) und 60 (Minuten je Stunde)
Divisionsspalte = Table.TransformColumns(#"Umbenannte Spalten1", {{"Dauer in Minuten - dezimal", each _ / 1440, type number}}),
#"Addition eingefügt" = Table.AddColumn(Divisionsspalte, "Addition", each [Start] + [#"Dauer in Minuten - dezimal"], type number),
#"Geänderter Typ2" = Table.TransformColumnTypes(#"Addition eingefügt",{{"Addition", type datetime}}),
// Der höheren Transparenz wegen…
#"Umbenannte Spalten2" = Table.RenameColumns(#"Geänderter Typ2",{{"Addition", "Fertigstellung"}})
in
#"Umbenannte Spalten2"
Zwischenschritt mit Formel
In diesem Fall werden die Spaltenüberschriften so belassen, wie durch den Import der Daten vorgegeben. In der Benutzerdefinierten Formel wird das Datum aus Spalte 1 per Funktion in einen numerischen Wert konvertiert. Hier der Code:
let Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type datetime}, {"Spalte2", type any}, {"Spalte3", Int64.Type}}), #"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ",{"Spalte2"}), #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Entfernte Spalten", "neu", each Number.From([Spalte1])+[Spalte3]/24/60), #"Geänderter Typ1" = Table.TransformColumnTypes(#"Hinzugefügte benutzerdefinierte Spalte",{{"neu", type datetime}}) in #"Geänderter Typ1"
Lösung mit (prinzipiell) nur 1 Schritt
Die beiden ersten Schritte (Geänderter Typ) und (Entfernte Spalten) können Sie entfernen (löschen) oder einfach ignorieren. In diesem Beispiel werden durch Verschachtelung mehrere Einzel-Funktionen in einer einzigen Funktions-Zeile zusammengefasst:
let Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type datetime}, {"Spalte2", type any}, {"Spalte3", Int64.Type}}), #"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ",{"Spalte2"}), #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Entfernte Spalten", "neu", each DateTime.From(Number.From([Spalte1])+[Spalte3]/1440)) in #"Hinzugefügte benutzerdefinierte Spalte"
Ob der Sinnspruch „In der Kürze liegt die Würze“ in diesem Fall zutrifft, überlasse ich Ihrer persönlichen Einschätzung. 😉
Und hier, beim Stichwort last but not least finden Sie noch einen Hinweis, wo und wie Sie Antworten auf eventuelle Fragen oder auch die ausgearbeitete Datei bekommen können. Grundlegendes zum Thema M-Code lesen Sie hier im Blog nach.