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

Zeilen löschen und Tabelle transponieren mit PQ

Forumthread: Zeilen löschen und Tabelle transponieren mit PQ

Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 16:19:32
Christian
Hallo,

ich würde gerne erfahren, wie ich mein Problem mit PQ lösen kann.

Ich habe eine Tabelle mit 300 Spalten, von denen jede mindestens 6 Zeilen hat.

Zuerst einmal möchte ich alle Zeilen entfernen, AUSSER 1, 2, 5 und ab da jede 4. weitere, also 9, 13, 17, 21, 25 usw.

außerdem soll das was übrig bleibt noch transponiert werden, also Spalten zu Zeilen und Zeilen zu Spalten.

Wie geht das?

Gruß
Christian
Anzeige

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 16:44:44
Yal
Hallo Christian,

setze einen Indexspalte ab 1,
daneben eine benutzerdefinierte Spalte, die auf dem Index setzt:
= [Index] = 2 or Number.Mod([Index], 4) = 1
Filtere letzte Spalte nach True,
lösche diese beide Spalten,
Menü "Transformieren", "Vertauschen".

Siehe ChatGPT (Die "Blume" oben rechts) und frage dort nach eine Schritt für Schritt Anleitung in Power Query. Es wird ca. dasselbe rauskommen.

VG
Yal
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
14.05.2025 19:28:17
daniel
Hi
wenn VBA für dich eine Option ist, dann so:


Sub test()

'--- Zeilen löschen, außer 1, 2, 5 und ab da jede 4. Zeile
With ActiveSheet.Cells(1, 1).CurrentRegion
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=if(OR(Row()=1,Row()=2,Mod(Row(),4)=1),Row(),0)"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .Column, xlNo
.ClearContents
End With
End With

'--- jede Spalte ab Zeile 3 sortieren
Dim c As Range
For Each c In ActiveSheet.Cells(1, 1).CurrentRegion.Offset(2, 0).Columns
c.Sort key1:=c(1), order1:=xlAscending, Header:=xlNo
Next

'--- Transponieren
With ActiveSheet.Cells(1, 1).CurrentRegion
.Copy
.Offset(0, .Columns.Count).PasteSpecial xlPasteAll, Transpose:=True
.EntireColumn.Delete
End With

End Sub


vor dem Testen bitte Originaldaten sichern, denn diese werden durch den Code bearbeitet.
Gruß Daniel
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
14.05.2025 20:02:43
Christian
Hallo Daniel,

hat zwar etwas gedauert, bis es Klick gemacht hat, wie es funktioniert, aber funktioniert einwandfrei.

Danke
Christian

AW: Zeilen löschen und Tabelle transponieren mit PQ
15.05.2025 11:57:34
Yal
Hallo zusammen,

nur vollständigkeitshalber, die PQ-Lösung inkl. Abbau der Doppelung (List.Distinct)

let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Hinzugefügter Index" = Table.AddIndexColumn(Quelle, "Index", 1, 1, Int64.Type),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Hinzugefügter Index", "Benutzerdefiniert", each [Index] = 2 or Number.Mod([Index], 4) = 1),
#"Gefilterte Zeilen" = Table.SelectRows(#"Hinzugefügte benutzerdefinierte Spalte", each ([Benutzerdefiniert] = true)),
Entf1 = Table.RemoveColumns(#"Gefilterte Zeilen",{"Index", "Benutzerdefiniert"}),
Transpo1 = Table.Transpose(Entf1),
S1 = Table.AddColumn(Transpo1, "S1", each List.Sort(List.Distinct(List.Select(List.Skip(Record.ToList(_),1), each _> null)))),
Entf2 = Table.SelectColumns(S1,{"Column1", "S1"}),
S2 = Table.AddColumn(Entf2, "S2", each List.Combine({{[Column1]},[S1]})),
Entf3 = Table.SelectColumns(S2,{"S2"}),
#"Extrahierte Werte" = Table.TransformColumns(Entf3, {"S2", each Text.Combine(List.Transform(_, Text.From), ";"), type text}),
Split = Table.SplitColumn(#"Extrahierte Werte", "S2", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv)),
Transpo2 = Table.Transpose(Split)
in
Transpo2

Am Ende ist natürlich die Lösung, bei dem man sich "zu Hause" fühlt am besten. VBA ist dabei überschaubarer.
Sollte das Gesamtergebnis Cloud-tauglich sein, wird VBA im Wege stehen.

S1 im Detail: aus der Datensatz eine Liste (Record.ToList), erste Element raus (Skip), null raus (Select), Doppelung raus (Distinct) und sortieren.

VG
Yal
Anzeige
Korr.
15.05.2025 12:28:28
Yal
Der Splitter scheint ohne eine Vorgabe der Spaltenzahl nicht zuverlässig zu arbeiten. Mit Table.FromColumns hat man eine schlankere Lösung.
Und den "List.RemoveNulls" habe ich (vorher gesucht und nicht gefunden) bei Luschis Lösung doch entdeckt.

let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Hinzugefügter Index" = Table.AddIndexColumn(Quelle, "Index", 1, 1, Int64.Type),
UDef = Table.AddColumn(#"Hinzugefügter Index", "S0", each [Index] = 2 or Number.Mod([Index], 4) = 1),
#"Gefilterte Zeilen" = Table.SelectRows(UDef, each ([S0] = true)),
Entf1 = Table.RemoveColumns(#"Gefilterte Zeilen",{"Index", "S0"}),
Transpo1 = Table.Transpose(Entf1),
S1 = Table.AddColumn(Transpo1, "S1", each List.Sort(List.Distinct(List.RemoveNulls(List.Skip(Record.ToList(_),1))))),
S2 = Table.AddColumn(S1, "S2", each List.Combine({{[Column1]}, [S1]})),
Entf2 = Table.SelectColumns(S2,{"S2"}),
T1 = Table.FromColumns(Entf2[S2])
in
T1

VG
Yal
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 16:56:30
Christian
Hallo Yal,

das sieht ja schonmal super aus.
Eine Sache hab ich noch, ich dachte das könnte ich selber lösen aber leider doch nicht.

Ich wollte vor dem Vertauschen und nach dem Löschen, die Spalten alphabetisch sortieren. Jedoch jede Spalte einzeln für sich und erst ab Zeile 3, also die ersten beiden Zeilen als Überschriften nicht mitsortieren.

Geht das auch noch irgendwie?

Danke
Christian
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 17:48:46
Yal
hallo Christian,

Du meinst wahrscheinlich die "Zeilen sortieren", wenn das vor dem Transponieren stattfinden soll. Erst danach werden daraus Spalten.

Dann in dem bisherige Beschreibung, bevor die Hilfspalte gelöscht werden,
eine benutzerdefinierte Spalte mit
= if [Index] = 1 then 1 else 2
einführen,
dann nach diese Spalte sortieren, dann nach der Spalte mit den Begriffe, die alphabetisch sortiere werden sollen. Die beide Sortierungsschritt werden zusammengepackt.
Dann sind anschliessend 3 Spalten zu entfernen.

VG
Yal
Anzeige
PQ vs VBA
14.05.2025 20:47:06
daniel
Das könnte schwierig werden.

Die PQ arbeitet in einer strengen Tabellenlogik.
zum einen wird problematisch, dass du zwei Zeilen Überschrift hat, eine reguläre Tabelle hat eine Zeile Überschrift und der Rest Daten.
ebenso gehören in einer regulären Tabelle alle Daten in einer Zeile zu einem gemeinsamen Datensatz.
dh wenn du jede Spalte einzeln sortieren willst, hast du nicht mehr eine Tabelle mit 300 Spalten, sondern 300 Tabellen mit einer Spalte und in der PQ verarbeitest du immer eine Tabelle.
Weil du in deinem Aufbau von der strengen Tabellenform abweichst, vermute ich, dass sich diese Aufgabe mit klassischem VBA einfacher lösen lassen wird als mit der tabellenorientierten PQ.

Gruß Daniel
Anzeige
AW: PQ vs VBA
14.05.2025 20:55:44
Christian
Hallo Daniel,

was heißt das könnte schwierig werden, Luschi hat ja genau dies in PQ umgesetzt und Yal den Rest.

Dein Makro berücksichtigt ja sowieso alles.

Gruß
Christian
AW: PQ vs VBA
14.05.2025 22:09:54
Daniel
Luschi schrieb: " aber nur, wenn man bereit ist, in die PQ-M-Sprache tiefer einzusteigen.
Das PQ-M-Oberflächenmenü ist dazu leider nicht in der Lage."

Das meinte ich.

Schau dir beide Programmierungen an und vergleiche sie under dem Gesichtspunkt,wie lange du bräuchtest, um zu verstehen was da gemacht wird und wie lange du benötigen würdest, so etwas ohn Hilfe des Forums selbst zu erstellen.
Anzeige
AW: PQ vs VBA
14.05.2025 22:15:53
Christian
ok, unter dem Gesichtspunkt gebe ich dir wohl recht. das würde bei mir sehr lange dauern und bei Programmierung hab ich bei VBA wohl wirklich mehr Erfahrung, auch wenn sie nicht die größte ist.
Gruß
Christian
AW: PQ vs VBA
14.05.2025 22:25:50
Daniel
"wird schwierig" bedeutet nicht "geht nicht"
unterm Strich
14.05.2025 22:33:03
Christian
werde ich jetzt im Endeffekt die VBA Lösung nehmen, weil ich noch einen Schritt eingefügt habe, für den meine VBA Kenntnisse ausgereicht haben, während ich im M-Code erneut eure Hilfe gebraucht hätte (hab noch vor dem Transponieren Duplikate entfernt, ebenfalls jede Spalte für sich genommen)

Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 17:59:08
Christian
Hallo Yal, das hast du glaube ich falsch verstanden,

ich will vor dem transponieren die Begriffe in A3:A14 B3:B18 C3:C18 usw. alphabetisch sortieren.
Jede Spalte für sich.

Gruß
Christian

Oder von mir aus auch nach dem transponieren innerhalb einer Zeile, kommt ja vom Ergebnis her aufs selbe raus.
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 18:54:37
Luschi
Hallo Christian,

das was Du willst:
jede Spalte für sich sortieren

ist in 1er Datenbankstruktur so im Standard nicht möglich. Jede Spalte in der Zeile ist als Record-Objekt innig miteinander verheiratet.
Wird 1 Spalte sortiert, müssen die abhängigen Zeilen in den anderen Spalten der Sortierung folgen.
Natürlich kann man Deinen Wunsch auch erfüllen; aber dafür ist 1 Demotabelle erforderlich, denn mit verbalen Beschreibungen ist hier (in PQ) nix zu holen.

Gruß von Luschi
aus klein-Paris
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 19:40:02
Yal
Hallo Luschi,

nach dem Transponieren kann man einen Record.ToList, ListSort und anschliessend Record.FromList anstossen und somit die Anforderung näher kommen. Viel Spass damit.

@Christian: ich habe es nicht falsch verstanden, sondern gar nicht verstanden. Es stand ja auch nichts in der Erklärung. Ich arbeite zwar gerade an einem Makro zum Gedankenlesen, aber es dauert noch ein Bischen.

VG
Yal
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 22:10:31
Christian
Hallo Luschi,

wie ich schon zu Yal vor wenigen Minuten sagte, hört sich das ja so an, als wäre das einfacher mit VBA zu lösen, wo man für jede Spalte einen Bereich angeben kann, der sortiert werden soll und dann eine Schleife durch alle Spalten machen kann.

Hier jedenfalls auch für dich die Bsp Datei:

https://www.herber.de/bbs/user/177438.xlsx

Zu Spalte A:C Wie gesagt, Zeile 1, 2, 5 und dann jede 4. weitere Zeile soll behalten werden. (schwarze Schrift), die anderen zeilen sollen gelöscht werden, rote Schrift

Zu Spalte G:I So soll es dann aussehen nach dem Sortieren: Die ersten beiden Zeilen bleiben wie sie sind, die Texte ab Zeile 3 wurden jede Spalte einzeln sortiert.

Zu Spalte K:Q das ist dann das gewünschte Endergebnis nach dem Transponieren.

Danke auch dir
Christian
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
14.05.2025 18:58:29
Luschi
Hallo Christian,

hier mal mein PQ-Vorschlag. Wie du siehst, sind dazu nur wenige PQ-Schrittfolgen erforderlich - aber nur, wenn man bereit ist, in die PQ-M-Sprache tiefer einzusteigen.
Das PQ-M-Oberflächenmenü ist dazu leider nicht in der Lage.

https://www.herber.de/bbs/user/177451.xlsx

Gruß von Luschi
aus klein-Paris


Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
14.05.2025 19:37:50
Christian
Hallo Luschi,

das ist ja für mich auf den ersten Blick nur die Ursprungstabelle Spalte für Spalte sortiert.
Muss ich dann mal schauen, wie ich die anderen Schritte dazugebastelt bekomme.

Werde mein bestes geben
Danke schonmal
AW: Zeilen löschen und Tabelle transponieren mit PQ
14.05.2025 19:52:20
Christian
Hallo Luschi,

Zitat aus meinem Anfangsbeitrag:

Ich habe eine Tabelle mit 300 Spalten, von denen jede mindestens 6 Zeilen hat.

Zuerst einmal möchte ich alle Zeilen entfernen, AUSSER 1, 2, 5 und ab da jede 4. weitere, also 9, 13, 17, 21, 25 usw.

außerdem soll das was übrig bleibt noch transponiert werden, also Spalten zu Zeilen und Zeilen zu Spalten.

dazu einen Beitrag später:

Eine Sache hab ich noch, ich dachte das könnte ich selber lösen aber leider doch nicht.

Ich wollte vor dem Vertauschen und nach dem Löschen, die Spalten alphabetisch sortieren. Jedoch jede Spalte einzeln für sich und erst ab Zeile 3, also die ersten beiden Zeilen als Überschriften nicht mitsortieren.

Zum dritten aus dem Beitrag mit der Bsp Datei

Zu Spalte A:C Wie gesagt, Zeile 1, 2, 5 und dann jede 4. weitere Zeile soll behalten werden. (schwarze Schrift), die anderen zeilen sollen gelöscht werden, rote Schrift

Zu Spalte G:I So soll es dann aussehen nach dem Sortieren: Die ersten beiden Zeilen bleiben wie sie sind, die Texte ab Zeile 3 wurden jede Spalte einzeln sortiert.

Zu Spalte K:Q das ist dann das gewünschte Endergebnis nach dem Transponieren.


dachte das war eindeutig... sorry.

Gruß
Christian
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
14.05.2025 19:47:45
Luschi
Hallo Christian,
nur die Ursprungstabelle Spalte für Spalte sortiert🥵

- warum definierst Du jetzt nicht neu, wie es weiter gehen soll?

fragt sich Luschi
aus klein-Paris
dazu noch...
14.05.2025 19:56:16
Christian
ich weiß dass für alle anderen Schritte Yal schon gesagt hat, wie es geht, deshalb sagte ich ja auch nur, ich schaue dann nur noch, wie ich die anderen Schritte dazugefügt bekomme, anstatt dich zu bitten, nochmal Hand anzulegen.
Anzeige
AW: Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 19:55:57
Christian
Ich bin im Moment unterwegs schicke wenn ich daheim bin eine Bsp Datei.
Christian
AW: Zeilen löschen und Tabelle transponieren mit PQ
13.05.2025 22:06:55
Christian
Hallo Yal,

das Misverständnis tut mir leid, für mich war die Beschreibung eindeutig. Aber ich verstehe auch, dass es für jemand, der weiß, worauf das Ganze hinauslaufen soll, das Ganze anders aussieht, als für die andere Seite.
Auf jeden Fall tut es mir leid.

Hier eine kleine Bsp Datei.

Zu Spalte A:C Wie gesagt, Zeile 1, 2, 5 und dann jede 4. weitere Zeile soll behalten werden. (schwarze Schrift), die anderen zeilen sollen gelöscht werden, rote Schrift

Zu Spalte G:I So soll es dann aussehen nach dem Sortieren: Die ersten beiden Zeilen bleiben wie sie sind, die Texte ab Zeile 3 wurden jede Spalte einzeln sortiert.

Zu Spalte K:Q das ist dann das gewünschte Endergebnis nach dem Transponieren.

Aber unterm Strich habe ich nach Luschis Beitrag das Gefühl, mit VBA besser aufgehoben zu sein oder? Da kann ich ja ganz klar einzelne Bereiche angeben die sortiert werden sollen und eine Schleife durch alle Spalten machen.

Gruß
Christian

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

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige