Quelle: https://www.clever-excel-forum.de/Thread-Sortierproblem–41296
Stand: 10.10.2024 19:00
Hier der Eröffnungsbeitrag aus dem Forum:
Hallo, ich habe ein Problem, ich hab jetzt alles probiert, ich bekomme
es einfach nicht hin.
Mir hat jemand eine Liste vorgeben mit Datumszeiträumen
ich möchte das jetzt sortieren, dass die Maßgabe das linke Datum ist und dann der Reihe nach erst 2024 dann weiter mit 2025, jetzt ist alles durcheinander
Danke für Euere Hilfe
27.08.–31.08.2024
28.02.–10.03.2024
28.03.–01.04.2024
28.04.–06.052024
28.07.–03.08.2024
28.09.–11.10.2024
28.12.–02.01.2025
28.12.–02.01.2025
28.12.–07.01.2024
29.02.–05.03.2024
29.03.–01.04.2024
29.06.–07.07.2024
29.09.–04.10.2024
29.09.–05.10.2024
29.09.–05.10.2024
29.09.–06.10.2024
30.04.–07.05.2024
30.05.–08.06.2024
30.05.–12.06.2024
30.06.–06.07.2024
30.09.–09.10.2024
30.12.–02.01.2025
30.12.–02.01.2025
30.12.–02.01.2025
31.03.–07.04.2024
31.08.–14.09.2024
Angehängte Dateien
https://www.clever-excel-forum.de/attachment.php?aid=53572
Dass die Daten aus Spalte A keine kalendarischen Daten sondern Text sind, sollte für erfahrene User offensichtlich sein. Und dass ein Sortieren unter diesen Bedingungen nicht erfolgsversprechend ist, bedarf keiner Erklärung. Der IMHO sinnvollste Weg ist, den jeweiligen „von“ und „bis“-Wert in einer eigenen Spalte darzustellen, welcher dann auch als korrektes Datum formatiert ist.
Hinweis: Wenn im Laufe deiner Lösungsfindung neue Forderungen aufgestellt werden oder sich die Ausgangslage verändert, finde ich das bei zahlenden Kunden gar nicht schlimm, denn der Aufwand und damit die Bezahlung steigen. In Foren sollte sich ein Fragesteller gefälligst umfänglich so viele Gedanken machen, dass die kostenlose Hilfe nicht immer wieder von vorn beginnen muss. Ich halte mich hier im (kostenlosen Blog) stets an den Stand der Dinge, den ich zu Beginn meiner Lösungsfindung erkenne.
Wie in fast allen Fällen erstelle ich in diesem Blog eine PQ-Lösung so, dass diese möglichst transparent ist und somit gut nachvollzogen werden kann. Das kann in vielen Fällen bedeuten, dass der eine oder andere Schritt mehr gegangen wird. „Who cares“ 😉 Mausklicks sind für User einfacher und weniger fehlerträchtig als möglichst konzentrierter Code. Hier nun der M‑Code:
let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle2"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}),
// Prinzipiell ist dieses dann das "von"-Datum, wenn auch ohne Jahreszahl
#"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Geänderter Typ", "Spalte1", Splitter.SplitTextByDelimiter("-", QuoteStyle.csv), {"Spalte1.1", "Spalte1.2"}),
// Die Überschrift ist besser…
#"Umbenannte Spalten" = Table.RenameColumns(#"Spalte nach Trennzeichen teilen",{{"Spalte1.2", "bis"}}),
// Jetzt als korrektes Datum
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Umbenannte Spalten",{{"bis", type date}}),
// Numerischer Wert, da bei jahresübergreifenden Zeiträumen 1 Jahr beim "von"-Wert subtrahiert werden muss
#"Jahr eingefügt" = Table.AddColumn(#"Geänderter Typ1", "Jahr", each Date.Year([bis]), Int64.Type),
#"Umbenannte Spalten1" = Table.RenameColumns(#"Jahr eingefügt",{{"Jahr", "numJahr"}}),
// An Text (Spalte1.1) kann nur Text angehänt werden
#"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Umbenannte Spalten1", "txtJahr", each Text.From([numJahr])),
// Gleich in das Datum-Format umwandeln und bei Bedarf 1 Hahr subtrahieren; Das Spaltenformat ist aber NICHT Datum!
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte1", "von", each if Date.From([Spalte1.1] & [txtJahr]) < [bis]
then Date.From([Spalte1.1] & [txtJahr])
else Date.From([Spalte1.1] & Number.ToText([numJahr]-1))),
// Jetzt ein echtes Datum
#"Extrahiertes Datum" = Table.TransformColumns(#"Hinzugefügte benutzerdefinierte Spalte",{}),
// Reihenfolge der Markierung beachten!
#"Andere entfernte Spalten" = Table.SelectColumns(#"Extrahiertes Datum",{"von", "bis"}),
// Es sah nur nach dem Typ Datum aus … 😀
#"Geänderter Typ2" = Table.TransformColumnTypes(#"Andere entfernte Spalten",{{"von", type date}}),
// So habe ich den Fragesteller verstanden, eventuell jedoch die Spalte "bis" stattdessen sorteiern.
#"Sortierte Zeilen" = Table.Sort(#"Geänderter Typ2",{{"von", Order.Ascending}})
in
#"Sortierte Zeilen"
… und den Fehler in der Ergebnis-Abfrage Zeile 154 (vor dem Sortieren) sollten Sie in den Rohdaten, also der Excel-Tabelle (A155) beheben, der Aufwand in Power Query wäre für diesen einen „Ausrutscher“ gewiss zu hoch, wenn auch machbar!
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.