PQ: Listeneinträge / Zeilen vervielfachen (Spezial) (1)

Xtract: Vervielfälti­gen von Zeilen ein­er Liste, fort­laufende Num­merierung nach in Spal­ten hin­ter­legten Werten (von..bis). Beson­der­heit: Werte in Zellen für den Start- und Endw­ert enthal­ten teil­weise einen alphanu­merischen Prä­fix (z.B. X1), nur die Zahlen sollen hochgezählt wer­den.

Wis­sens­stand: Lev­el 3 ⇒ Excel GUT!, min­destens Basis-Ken­nt­nisse in Pow­er Query

Prolog

In einem Excel-Forum wurde die Frage gestellt, wie mit­tels Pow­er Query eine mehrspaltige Liste der­art umgestellt wer­den kann, dass die Anzahl der Zeilen so vervielfacht wird, dass die numerischen Werte der ersten bei­den Spal­ten (von … bis) in 1er-Schrit­ten aufgefüllt/hochgezählt wer­den. Prinzip­iell ist das ja auch nichts außergewöhn­lich­es, ein der­ar­tiger Vor­gang wurde beispiel­sweise hier im Blog beschrieben. In diesem Fall ist aber eine Beson­der­heit gegeben, sehen Sie sich ein­fach ein­mal den Screen­shot der (leicht vere­in­facht­en) Liste an:

Kleine Demo-Tabelle als Muster

Die ersten bei­den Zeilen sind exakt nach dem Muster wie in der oben ver­Link­ten Datei prob­lem­los lös­bar. Die let­zten bei­den Ein­träge in den ersten bei­den Spal­ten sind keine reinen Zahlen, son­dern haben einen alphanu­merischen Prä­fix. Um das gewün­schte Ziel zu erre­ichen muss also Sorge dafür getra­gen wer­den, dass nur die numerischen Werte für das Erstellen ein­er Liste herange­zo­gen wer­den. Und was für die Lösung noch rel­e­vant ist: Die Ergeb­nis-Tabelle soll eine exak­te Kopie der jew­eili­gen Zeilen enthal­ten, also sollen auch die let­zten bei­den Zeilen der Basis­dat­en ein­schließlich des unverän­derten alphanu­merischen Prä­fix mehrfach numerisch hochgezählt dargestellt wer­den.

Als Muster-Datei biete ich Ihnen erst ein­mal die etwas umfan­gre­ichere Tabelle aus dem Forum hier zum Down­load an. Sie erken­nen, dass das Prinzip zur oben als Bild dargestell­ten Tabelle iden­tisch ist, es sind nur einige Daten­sätze mehr. Daneben hat der Fragesteller in den Spal­ten F:H ist auch schon die Wun­schlö­sung aufge­führt. Und bis auf die Rah­men­lin­ien zwis­chen den Ergeb­nis-Blöck­en lässt sich das auch mit etwas mehr (aber ein­ma­ligem) Aufwand per Pow­er Query real­isieren. Ich habe auch in der Muster-Datei im Bere­ich Ist eine Zeile hinzuge­fügt, um nicht immer nur das Prä­fix Z und auch ein­mal 3‑stellige Werte in der 2. Spalte zu ver­wen­den.

Da die Roh­dat­en seit­ens des Fragestellers bere­its als Tabelle for­matiert wor­den sind, ist ein direk­ter Import in Pow­er Query möglich. Sie wer­den sich denken kön­nen, dass auch hier in PQ viele Wege nach Rom (sprich: mehrere Wege zum Ziel) führen. Ich ver­suche in diesem Blog einen Weg zu gehen, der möglichst ver­ständlich ist; selb­st wenn bei der Erstel­lung der Abfrage dadurch der eine oder andere Schritt mehr erforder­lich ist. Und ich ver­suche auch Rück­sicht auf jene User zu nehmen, die nicht die allerneueste Excel- bzw. PQ-Ver­sion auf dem Rech­n­er haben. Und ich gehe in diesem Beitrag auch davon aus, dass max­i­mal ein Buch­stabe vor den Zif­fern einge­fügt ist.

▲ nach oben …

In jeder PQ-Version realisierbar

Die ersten bei­den Gedanken, die Länge des Zellinhalts als Argu­ment zu ver­wen­den oder durch Umwand­lung des Daten­typs in eine (echte) Zahl einen Error zu provozieren, habe ich rasch als nicht real­isier­bar oder deut­lich zu aufwendig bei­seite gelegt. Der nächst beste (hier auch vorgestellte) Weg ist auch nicht wirk­lich „kurz und knack­ig”, aber aus mein­er Sicht auch nachvol­lziehbar, wenn sie gute Excel-Ken­nt­nisse haben und auch der englis­chen Sprache etwas mächtig sind.

Unter dem Aspekt, dass im Zweifels­fall immer nur das erste Zeichen der Zelle ent­fer­nt wer­den muss, um zum Ziel des rein numerischen Ergeb­niss­es zu gelan­gen, gehen Sie den Weg über Spalte hinzufü­gen und wählen dort im Menüband das Sym­bol Benutzerdefinierte Spalte. Im Dia­log tra­gen sie bei Neuer Spal­tenname von ein und im großen Feld Benutzerdefinierte Spal­tenformel geben Sie diese Funk­tion ein:

= if Value.Is([Wert von], type text) 
then
   Number.From(Text.End([Wert von], Text.Length([Wert von])-1))
else
   [Wert von]

Die etwas kom­plexere Formel zur Berech­nung der numerischen Werte

In der Spalte Wert bis gehen Sie gle­icher­maßen vor, nur dass sie naturgemäß als Über­schrift bis ver­wen­den und die Spal­tenna­men [Wert bis] ein­set­zen. Damit ist eine solide Grund­lage geschaf­fen, um die Liste mit den vervielfältigten Zeilen zu gener­ieren. Was aber noch bleibt ist die Forderung, dass im Endergeb­nis die alphanu­merischen Zeichen vor die fort­laufende Num­merierung einge­bun­den wer­den sollen. Siehe auch den Bere­ich F31:F36 in der Orig­i­nal-Tabelle. Sie brauchen also noch eine Spalte, wo bei reinen Zahlen­werten nichts (null), anson­sten das erste Zeichen des Textes enthal­ten ist. Vom Prinzip her ist das Vorge­hen iden­tisch zu den bei­den bish­eri­gen Formeln. Erstellen Sie also wiederum eine neue, Benutzerdefinierte Spalte, schreiben Prä­fix als Über­schrift und tra­gen Sie dort diese Formel ein:

= if Value.Is([Wert von], type text) 
then
  Text.Start([Wert von], 1)
else
  null

Nun sind wirk­lich alle Voraus­set­zun­gen zum Erre­ichen des Ziels gegeben. Erstellen Sie dazu wiederum eine Benutzerdefinierte Spalte, belassen sie die Über­schrift gerne bei Benutzerdefiniert und die Spal­tenformel ist aus­nahm­sweise ein­mal kurz und knack­ig:

{[von]..[bis]}

Pow­er Query hat nach dem Klick auf OK die Spalte Benutzerdefiniert erstellt, der Inhalt jed­er einzel­nen der sieben Zeilen ist List. Ein Klick auf den Dop­pelpfeil Doppelpfeil und anschließend Auf neue Zeilen ausweit­en wählen. Ruck­zuck sind die gewün­scht­en Zeilen gener­iert wor­den, die Abfrage umfasst nun 39 Zeilen.

Im näch­sten Schritt geht es darum, dass die teil­weise vor­angestell­ten alphanu­merischen Zeichen wieder inte­gri­ert wer­den. Dazu markieren Sie zuerst die Über­schrift Prä­fix, Strg und dann Benutzerdefiniert. Recht­sklick in eine der bei­den markierten Über­schriften und wählen Sie im Kon­textmenü Spal­ten zusam­men­führen. Bei Trennze­ichen belassen sie es bei –Keine– und bei Neuer Spal­tenname (option­al) geben Sie Wert ein.

Das bish­erige Ergeb­nis sollte schon ein­mal überzeu­gen. Markieren Sie nun genau in dieser Rei­hen­folge die Über­schriften Wert, Vari­able 1 und Vari­able 2, Recht­sklick in eine der markierten Über­schriften und Andere Spal­ten ent­fer­nen.

Bin­go, das sieht schon exakt so aus, wie es vom Fragesteller gewün­scht war. Ein stich­proben­weis­er Ver­gle­ich wird Ihnen das auch bestäti­gen. Jet­zt nur noch Datei | Schließen und laden in… | Beste­hen­des Arbeits­blatt und markieren Sie beispiel­sweise die Zelle J4, um die Abfrage in gle­ich­er Höhe wie die Soll-Vor­gabe des Fragestellers als Tabelle in das Arbeits­blatt einzu­tra­gen. Sollte die Möglichkeit Beste­hen­des Arbeits­blatt aus­ge­graut sein, ein­fach als Tabelle spe­ich­ern und im Anschluss an die Wun­sch­po­si­tion im gewün­scht­en Arbeits­blatt ver­schieben.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 2,50 € freuen …


Dieses The­ma umfasst mehrere Teile:

Teil 1 Gilt für alle PQ-Ver­sio­nen. Voraus­set­zung ist aber, dass ein vorhan­denes Prä­fix max­i­mal 1 Zeichen lang ist.
Teil 2 Erfordert Excel >=2019 oder 365. Das Prä­fix hat eine beliebige Länge und kann recht prob­lem­los separi­ert wer­den.
Teil 3 Prä­fix hat beliebige Länge, beliebige PQ-Ver­sion. Deut­lich aufwendi­ger als mit den neueren Ver­sio­nen (siehe Teil 2) aber den­noch zielführend.
$/$$ Außer
Konkur­renz
Gle­iche Voraus­set­zun­gen wie in Teil 3. Mehrere Möglichkeit­en, auf kürz­eren Wegen, mit weniger Schrit­ten zum gewün­scht­en Ziel zu gelan­gen. Viel M-Code.
Dieser Beitrag wurde unter Datentyp anpassen, Foren-Q&A, Power Query, PQ-Formeln (Sprache M), Spalten bearbeiten, Text-Behandlung, {Liste} abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.