(Header)
Quelle: https://www.herber.de/forum/messages/1993389.html
Stand: 13.10.2024 12:45
Hier der Eröffnungsbeitrag aus dem Forum:
Hallo,
ich möchte abhängig von einem Auswahlfeld in B1 (Werk 1 bis Werk 4) jeweils die Umsatzwerte Jan.-Dez. 24 aus den verschiedenen Registerblättern der Werke ziehen.
Die Umsatzwerte stehen in den Registerblättern des jeweiligen Werkes zwar immer in den selben Feldern, die Struktur ist von Werk zu Werk (von Registerblatt zu Registerblatt) aber etwas abweichend.
Bekomme es gerade nicht hin. Anbei ist auch die Beispieldatei.
https://www.herber.de/bbs/user/172755.xlsx
Vielen Dank & Gruß
Manfred
Vorab angemerkt (und nach erstellter Lösung nachgeschoben): Meine Ausarbeitung basiert auf der im ersten Beitrag geposteten Muster-*.xlsx (siehe weiter oben). Die später „nachgeschobene“ Datei mag zwar den Gegebenheiten vor Ort entsprechen, aber da ich Salami-Taktik in Foren komplett ablehne, belasse ich es bei meiner zu Beginn erstellten. Lösung. – Und noch etwas: Der erste Lösungsvorschlag funktionierte derzeit zwar, aber die Funktion INDIREKT() arbeitet volatil, darum sollte IMHO solch eine Bremse nicht verwendet werden. 😉
Mein Lösungsweg mit Power Query:
- Zelle B1 als Bereich deklarieren, mit dem Namen WerkAuswahl.
- B1 als Tabelle/Bereich in PQ importieren
- Im rechten Seitenfenster alle nach Quelle automatsch erzeugten Schritte löschen.
- Rechtsklick in die Daten-Zelle und Drilldown ausführen.
- Als Nur Verbindung Schließen und laden.
- Die 4 Daten-Tabellen ab B4 bis Zeile 16 (jeweils letzte Spalte) als Tabelle/Liste formatieren.
- Über Daten | Daten abrufen | Aus anderen Quellen | Leere Abfrage eine leere Query erstellen.
- Sofort in die Editierzeile diese Formel eingeben:
= Excel.CurrentWorkbook()
- In der neu erstellten Abfrage1, Spalte Name die Zeile WerkAuswahl per Filter löschen, da diese Tabelle für die Auswertung nicht genutzt werden soll..
Die restlichen Schritte ergeben sich aus dem M-Code; wobei Sie beim Filtern der Auswertung zuerst in der Spalte Name einen beliebigen Wert auswählen und dann per Hand durch den Namen der Drilldown-Query ersetzen.
Hier der M-Quellcode für die Werks-Auswahl:
let Quelle = Excel.CurrentWorkbook(){[Name="WerkAuswahl"]}[Content], Column1 = Quelle{0}[Column1] in Column1
… und für die eigentliche Auswertung:
let Quelle = Excel.CurrentWorkbook(), #"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([Name] <> "WerkAuswahl")), #"Ersetzter Wert" = Table.ReplaceValue(#"Gefilterte Zeilen","_"," ",Replacer.ReplaceText,{"Name"}), #"Erweiterte Content" = Table.ExpandTableColumn(#"Ersetzter Wert", "Content", {"Monat", "Spalte1", "Umsatz", "Spalte2"}, {"Monat", "Spalte1", "Umsatz", "Spalte2"}), #"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Erweiterte Content", {"Name", "Monat"}, "Attribut", "Wert"), #"Gefilterte Zeilen1" = Table.SelectRows(#"Entpivotierte andere Spalten", each [Name] = WerkAuswahl), #"Entfernte Spalten" = Table.RemoveColumns(#"Gefilterte Zeilen1",{"Attribut"}), #"Umbenannte Spalten" = Table.RenameColumns(#"Entfernte Spalten",{{"Wert", "Umsatz"}}), #"Geänderter Typ" = Table.TransformColumnTypes(#"Umbenannte Spalten",{{"Umsatz", Currency.Type}}), #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ", "Monate", each DateTime.ToText([Monat], "MMM. yy")), #"Entfernte Spalten1" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"Monat", "Name"}), #"Neu angeordnete Spalten" = Table.ReorderColumns(#"Entfernte Spalten1",{"Monate", "Umsatz"}) in #"Neu angeordnete Spalten"
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.