Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Christian

Forumthread: Christian

Christian
31.03.2025 21:31:42
Christian
Hallo,

ich möchte gerne erfahren, wie ich folgendes mit Powerquery lösen kann.

Habe eine intelligente Tabelle namens Tabelle5 (300 Spalten, 296 Zeilen im Original, hab die Bsp Datei kleiner gewählt).

Daraus möchte ich 3 Spalten machen, Nr. 1 mit allen Texten, die mit movie: oder series: beginnen

Nr. 2 der dazugehörige Name, der in Zeile 3 steht
Nr. 3. die dazugehörige Adresse in Zeile 2 steht

So wie in den Spalten G:I soll es dann aussehen

Danke für eure Hilfe
Christian

https://www.herber.de/bbs/user/176518.xlsx
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
neuer Betreff: PQ - Inhalte aus Spalten neu anordnen owT
31.03.2025 21:32:29
Christian
AW: Christian
31.03.2025 23:36:18
Yal
Hallo Christian,

ich bin zwar ein grosser Fan von Power Query, aber hier ist die Datenkonstellation eine Herausforderung für Power Query:
man müsste jede Spalte einzel behandeln, die Zielelemente extrahieren und diesen in der Ausgabeform bringen.
Mit VBA ist diese Vorgang noch relativ einfach, aber mit PQ eine harte Nuss. Gefällt mir.

Aber bevor Du zu lang auf einer PQ-Lösung warten musst, anbei die -einfache- VBA-Lösung:

Sub zusammenfassen()

Dim Arr()
Dim c
Dim r
Dim tx

With Range("Tabelle5").ListObject
'Durchgehen und sammeln
ReDim Arr(1 To .ListColumns.Count, 1 To 3)
For c = 1 To .ListColumns.Count
With .ListColumns(c).DataBodyRange
Arr(c, 1) = .Cells(1).Value
Arr(c, 2) = .Cells(2).Value
For r = 3 To .Cells.Count
Select Case LCase(Left(.Cells(r).Value, 5))
Case "serie", "movie": Arr(c, 3) = Arr(c, 3) & ";" & .Cells(r).Value
End Select
Next
End With
Next
'Ausgeben
For c = 1 To .ListColumns.Count
For Each tx In Split(Mid(Arr(c, 3), 2), ";")
With .Parent.Cells(Rows.Count, "G").End(xlUp)
.Offset(1, 0).Value = tx
.Offset(1, 1).Value = Arr(c, 2)
.Offset(1, 2).Value = Arr(c, 1)
End With
Next
Next
End With
End Sub

Jetzt kann ich in Ruhe an der PQ-Lösung rangehen.

VG
Yal
Anzeige
AW: Christian
31.03.2025 23:38:47
Christian
Hallo Yal,

danke erstmal. Siehst du und ich dachte eine PQ Lösung wäre einfacher und habe deshalb danach gefragt.
Nimms mir bitte nicht übel, aber muss morgen um halb 6 raus, ich werde es erst morgen testen.

Falls die Herausforderung mit PQ zu groß wird, komme ich sicher auch mit der VBA Lösung klar.

Danke
Christian
Anzeige
AW: Christian
01.04.2025 08:17:37
Christian
Hallo Yal, vielen Dank, der VBA Code funktioniert.

Gruß
Christian
AW: Christian
01.04.2025 00:52:31
Yal
Hallo Christian,

Du darfst testen, wie und wann es dir passt :-))

Anbei die Power Query-Lösung. Es besteht aus 2 Teilen. Eine davon ist eine Funktion. Einfach in Power eine neue leere Abfrage erzeugen und mit dem erweiterte Editor folgende m-Code reinbringen:

let

Quelle = (R as record) as text =>
let
Quelle = Record.ToTable(R),
GefilterteZeilen = Table.SelectRows(Quelle, each Text.StartsWith([Value], "movie") or Text.StartsWith([Value], "series")),
erg = Text.Combine(GefilterteZeilen[Value], ";")
in erg
in
Quelle
Diese Abfrage in "movie_series" umbenennen.

Der Hauptteil wird über die Tabelle5 aufgebaut. Eine Schritte ruft dann die Function "movie_series"
let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle5"]}[Content],
#"Transponierte Tabelle" = Table.Transpose(Quelle),
#"Umbenannte Spalten" = Table.RenameColumns(#"Transponierte Tabelle",{{"Column1", "Adresse"}, {"Column2", "Name"}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Umbenannte Spalten", "movie_series", each movie_series(Record.RemoveFields(_,{"Adresse", "Name"}))),
#"Andere entfernte Spalten" = Table.SelectColumns(#"Hinzugefügte benutzerdefinierte Spalte",{ "movie_series", "Adresse", "Name"}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Andere entfernte Spalten", each ([movie_series] > "")),
#"Spalte nach Trennzeichen teilen" = Table.ExpandListColumn(Table.TransformColumns(#"Gefilterte Zeilen", {{"movie_series", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "movie_series")
in
#"Spalte nach Trennzeichen teilen"


Wobei diese Function sich auch direct in der Hauptabfrage "reinschmuggeln" lässt. Es ist aber nicht mehr "low code/no code" sondern man muss kräftig basteln. Man benutzt M-Code-Funktionen, die nicht mehr durch Zusammenklicken aufgerufen werden:
let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle5"]}[Content],
#"Transponierte Tabelle" = Table.Transpose(Quelle),
#"Umbenannte Spalten" = Table.RenameColumns(#"Transponierte Tabelle",{{"Column1", "Adresse"}, {"Column2", "Name"}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Umbenannte Spalten", "movie_series", each Text.Combine(List.Select(Record.ToList(Record.RemoveFields(_,{"Adresse", "Name"})), each Text.StartsWith(_, "movie") or Text.StartsWith(_, "series")), ";")),
#"Andere entfernte Spalten" = Table.SelectColumns(#"Hinzugefügte benutzerdefinierte Spalte",{ "movie_series", "Adresse", "Name"}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Andere entfernte Spalten", each ([movie_series] > "")),
#"Spalte nach Trennzeichen teilen" = Table.ExpandListColumn(Table.TransformColumns(#"Gefilterte Zeilen", {{"movie_series", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "movie_series")
in
#"Spalte nach Trennzeichen teilen"

VG
Yal
Anzeige
AW: Christian
01.04.2025 08:31:49
Christian
Hallo Yal,

die PQ Lösung funktioniert auch, auch danke hierfür und die viele Zeit die du dir für die Herausforderung genommen hast.

Gruß
Christian
Gerne
01.04.2025 09:59:32
Yal
Zeit ist relativ. Manche machen Sudoku oder Kreuzworträtsel, ich mache VBA und Power Query...
Im Kern geht es nur, die Langeweile zu bekämpfen.

VG
Yal
Anzeige
AW: Christian
01.04.2025 22:56:55
Luschi
Hallo Christian,

hier mal meine PQ-Variante: https://www.herber.de/bbs/user/176537.xlsx
Ich vermeide das Drehen der Tabelle und greife deshalb etwas tiefer in die Trickkiste der PQ-M-Sprache, um das Problem zu lösen.

Gruß von Luschi
aus klein-Paris

Anzeige
AW: Christian
02.04.2025 18:08:55
Christian
Hallo Luschi,

auch wenn es in der Bespieldatei funktioniert hat, bei der Größenordnung der Originaltabelle 296x300 und 816 zu findenden Texten, rechnet mein Laptop jetzt schon seit ca 15 Min.

Muss aber auch dazu sagen, habe die Funktion gelöscht, sah für mich nicht so aus, als hättest du sie benutzt, sodass ich der Meinung war, diese wäre noch ein Überbleibsel von Yals Vorschlag.

Gruß
Christian

PS: Probiere es natürlich gleich auch noch mit der Funktion. Schonmal vielen Dank für deine Lösung
Anzeige
AW: Christian
02.04.2025 19:36:30
Yal
Hallo Luschi,

wie immer tolle Arbeit bei der Verwendung von m-Code. Ich wünsche mir, ich wäre soweit, solche inline-Function schreiben zu können.

Ich hatte auch etwas in der Richtung gedacht, hatte aber keine Idee, wie ich die Spalten einzeln verarbeiten könnte, da die Zeilenreduktion nicht direkt möglich ist (daher das Transponieren). Du gehst das Problem um, im dem Du die Spalten stapelst und dann die nullen rausfilterst. Bei den 300 Spalten von Christian natürlich nur mit einem gewissen Bearbeitungszeit zu haben.

Ich freue mich immer neue PQ-Ideen zu sehen.

VG
Yal
Anzeige
AW: Christian
02.04.2025 18:18:27
Christian
Hallo Luschi, auch mit der Funktion, mein Excel rechnet sich leider tot, ich kann so nichts dazu sagen, ob es funktioniert, nur mutmaßen.

Allerdings muss ich ehrlicherweise sagen, bei Yals Lösungen war es jeweils eine Sache von wenigen Sekunden.

Trotzdem danke
Christian
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18