Bitte beachten Sie die hier beschriebene Besonderheit in Sachen des Herber-Forums.
Quelle: https://www.herber.de/forum/messages/1994865.html
Stand: 30.10.2024 22:00
Hier der Eröffnungsbeitrag aus dem Forum:
Aus einer 4stelligen zahl deen höchsten/ niedigsten Wert erm
Gibt es in excel eine Funktion, mit der man aus einer vierstelligen Zahl ( auch 0001) den höchsten und den niedrigsten wert darstellen kann (Beispiel: Zahl 1705; höchster Wert: 7510; niedrigster Wert: 0157)?
Hinweis von mir: Das ist tatsächlich der komplette Startbeitrag; keine Begrüßung, kein abschließender Gruß, kein … 🙁 Und das ist einer der Gründe, dass ich mich lange mit der Veröffentlichung dieser beiden Lösungsvorschläge zurückgehalten habe. Und an dieser Stelle auch noch ein Hinweis auf eine dort vorgeschlagene PQ-Lösung (26.10.2024 20:07:13). So etwas erinnert mich sehr stark an den Schriftsteller Franz Kafka, der Texte verfasste, die total „verschwurbelt“ und keineswegs für den „Normal-Leser“ verständlich sind. Ich finde es unabhängig vom Ergebnis des Codes schade, dass am Power Query interessierte User eher abgeschreckt werden können als einen schrittweisen Einstieg in dieses wunderbare Tool zu finden.
Lösungsmöglichkeit 1 (Für Einsteiger, immer 4‑stellige Zahlen)
Zugegeben, der einmalige Aufwand ist höher als beispielsweise eine der im Thread vorgeschlagenen Formellösungen. Aber beispielsweise als Übung für den Einstieg in Power Query oder für ergänzendes Lernen kann ich mir das gut vorstellen. Der Kern dieses Weges sind zwei eigene Abfragen, welche aus der als Argument übergebene Text-Ziffernfolge den minimalen und den maximalen Wert einer Zusammenstellung „berechnen“.
Ergänzen Sie gerne einige selbst die eine oder andere Zahl für die Auswertung. Gerne auch weniger oder mehr als 4 Stellen (Ziffern) und beobachten Sie die Auswertungen. Bei Interesse an diesem Thema aber fehlenden Grundlagen scheuen Sie sich nicht, einfach nachzufragen (siehe Fußbereich). – Hier die entsprechende Code-Blöcke:
let // Mein Tabellen-Name: 'RawData' Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], // Den autoomatisch erstellten Schritt händisch geändert #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}), // Prinzipiell: Zeilennummer, die auch nach dem Entpivotieren beibehalten wwird #"Hinzugefügter Index" = Table.AddIndexColumn(#"Geänderter Typ", "Index", 0, 1, Int64.Type), #"Spalte nach Position teilen" = Table.SplitColumn(Table.TransformColumnTypes(#"Hinzugefügter Index", {{"Spalte1", type text}}, "de-DE"), "Spalte1", Splitter.SplitTextByRepeatedLengths(1), {"Spalte1.1", "Spalte1.2", "Spalte1.3", "Spalte1.4"}), #"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Spalte nach Position teilen", {"Index"}, "Attribut", "Wert") in #"Entpivotierte andere Spalten"
Erstellung der Minimum-Ziffernfolge
let // Von RawData als neue Tabelle (Liste) erstellt -> Minimum Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}), // Aufteilen in einzelne Zeichen (Ziffern) #"Spalte nach Position teilen" = Table.SplitColumn(Table.TransformColumnTypes(#"Geänderter Typ", {{"Spalte1", type text}}, "de-DE"), "Spalte1", Splitter.SplitTextByRepeatedLengths(1), {"Spalte1.1", "Spalte1.2", "Spalte1.3", "Spalte1.4"}), #"Hinzugefügter Index" = Table.AddIndexColumn(#"Spalte nach Position teilen", "Index", 0, 1, Int64.Type), #"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Hinzugefügter Index", {"Index"}, "Attribut", "Wert"), // Es werden nur die Werte innerhalb der Index-Gruppe sortiert #"Sortierte Zeilen" = Table.Sort(#"Entpivotierte andere Spalten",{{"Index", Order.Ascending}, {"Wert", Order.Ascending}}), #"Entfernte Spalten" = Table.RemoveColumns(#"Sortierte Zeilen",{"Attribut"}), #"Hinzugefügter Index1" = Table.AddIndexColumn(#"Entfernte Spalten", "Index.1", 0, 1, Int64.Type), #"Gruppierte Zeilen" = Table.Group(#"Hinzugefügter Index1", {"Index"}, {{"Minimum", each Text.Combine([Wert],""), type text}}) in #"Gruppierte Zeilen"
Dito für die Maxima
let Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}), #"Spalte nach Position teilen" = Table.SplitColumn(Table.TransformColumnTypes(#"Geänderter Typ", {{"Spalte1", type text}}, "de-DE"), "Spalte1", Splitter.SplitTextByRepeatedLengths(1), {"Spalte1.1", "Spalte1.2", "Spalte1.3", "Spalte1.4"}), #"Hinzugefügter Index" = Table.AddIndexColumn(#"Spalte nach Position teilen", "Index", 0, 1, Int64.Type), #"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Hinzugefügter Index", {"Index"}, "Attribut", "Wert"), #"Sortierte Zeilen" = Table.Sort(#"Entpivotierte andere Spalten",{{"Index", Order.Ascending}, {"Wert", Order.Descending}}), #"Entfernte Spalten" = Table.RemoveColumns(#"Sortierte Zeilen",{"Attribut"}), #"Hinzugefügter Index1" = Table.AddIndexColumn(#"Entfernte Spalten", "Index.1", 0, 1, Int64.Type), #"Gruppierte Zeilen" = Table.Group(#"Hinzugefügter Index1", {"Index"}, {{"Maximum", each Text.Combine([Wert],""), type text}}) in #"Gruppierte Zeilen"
… Und die Ergebnis-Tabelle
let Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}), #"Hinzugefügter Index" = Table.AddIndexColumn(#"Geänderter Typ", "Index", 0, 1, Int64.Type), #"Zusammengeführte Abfragen" = Table.NestedJoin(#"Hinzugefügter Index", {"Index"}, #"Calc Min", {"Index"}, "Tabelle1 (Min)", JoinKind.LeftOuter), #"Erweiterte Tabelle1 (Min)" = Table.ExpandTableColumn(#"Zusammengeführte Abfragen", "Tabelle1 (Min)", {"Minimum"}, {"Minimum"}), #"Zusammengeführte Abfragen1" = Table.NestedJoin(#"Erweiterte Tabelle1 (Min)", {"Index"}, #"Calc Max", {"Index"}, "Tabelle1 (Max)", JoinKind.LeftOuter), #"Erweiterte Tabelle1 (Max)" = Table.ExpandTableColumn(#"Zusammengeführte Abfragen1", "Tabelle1 (Max)", {"Maximum"}, {"Maximum"}), #"Entfernte Spalten" = Table.RemoveColumns(#"Erweiterte Tabelle1 (Max)",{"Index"}) in #"Entfernte Spalten"
Die ersten 3 Queries sind bei mir als „Nur Verbindung“ gespeichert und somit nicht in der Arbeitsmappe sichtbar. Nur die Lösungs-Query ist im Arbeitsblatt (sichtbar) gespeichert.
Lösungsmöglichkeit 2 (Auch längere Ganzzahlen, Sie haben solide Kenntnisse in Excel)
Eine grundsätzlich andere Herangehensweise, wobei die Mausklick-Aktionen deutlich eingeschränkt sind. Ich habe mehr von den M-Funktionen Gebrauch gemacht, deren Funktionalität Sie bei Interesse auch recht gut in der MS-Hilfe nachlesen können.
Und vor dem Code-Block möchte ich Sie animieren, statt (oder zusätzlich) des gezeigten Weges für die Berechnung des Maximums doch einmal eigeninitiativ die M-Funktion Text.Reverse() einzusetzen. 😉
let Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], // Automatischer Schritt; // per Hand auf den Typ 'Text' ändern #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}}), #"Hinzugefügter Index" = Table.AddIndexColumn(#"Geänderter Typ", "Index", 0, 1, Int64.Type), #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Hinzugefügter Index", "Ziffern", each Text.ToList([Spalte1])), #"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Ziffern TopDown", each List.Sort([Ziffern],Order.Descending)), #"Hinzugefügte benutzerdefinierte Spalte2" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte1", "Ziffern DownTop", each List.Sort([Ziffern],Order.Ascending)), #"Hinzugefügte benutzerdefinierte Spalte4" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte2", "Minimum", each Text.Combine([Ziffern DownTop],"")), #"Hinzugefügte benutzerdefinierte Spalte3" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte4", "Maximum", each Text.Combine([Ziffern TopDown],"")), #"Andere entfernte Spalten" = Table.SelectColumns(#"Hinzugefügte benutzerdefinierte Spalte3",{"Minimum", "Maximum"}) in #"Andere entfernte Spalten"
Und ja, es ist tatsächlich nur 1 Tabelle/Abfrage. 😉
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.