PQ: Definierte Anzahl leerer Spalten einfügen

Xtract: In eine existierende Kreuzta­belle per Pow­er Query nach jed­er existieren­den Spalte eine definierte Anzahl von kom­plett leeren Spal­ten ein­fü­gen (warum auch immer).

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

Erstellt mit Excel 2019, in anderen Ver­sio­nen kön­nen Abwe­ichun­gen auftreten

PQ: Leerzeilen (Leerspalten) einfügen

In einem Excel-Forum (Herber.de) wurde eine Anfrage gestellt, die zwar schon durch Formeln/Funktionen gelöst wor­den ist mich aber reizte, sie durch Pow­er Query zu lösen. Ich zitiere hier den Text der Anfrage und stelle auch die (Orig­i­nal-) Muster-xlsx auf unserem Serv­er für Ihren Down­load zur Ver­fü­gung:

Hal­lo,
wie kann ich Dat­en von Spalte A und B in die Zeile 1 und 2 Transponieren und Zwis­chenspal­ten ein­fü­gen?
Mit der M Trans Formel kann ich zwar die Dat­en transponieren, aber keine leere Zwis­chenspal­ten ein­fü­gen.
Ich hab eine Liste Spalte A mit vie­len hun­derten Ein­trä­gen bei denen immer wieder welche dazukom­men und ich diese in der Zeile 1 und 2 haben sollte, allerd­ings mit Zwis­chenspal­ten.

„Eigentlich ganz ein­fach” dachte ich zu Beginn; obwohl ich kon­sta­tieren kann: Den eigentlichen Sinn des Vorhabens habe ich bis heute nicht klar erkan­nt, denn das genan­nte Ziel wider­spricht aus mein­er Sicht ein­fach den Regeln ein­er ordentlichen Daten­hal­tung.

Wie auch immer, recht schnell merk­te ich, dass das gewün­schte Ergeb­nis doch nicht so ganz ein­fach mit Pow­er Query zu gener­ieren ist. Zusam­menge­fasst und auch ergänzend noch ein­mal fol­gende Infor­ma­tio­nen: Eine zweis­paltige Liste vari­abler Länge soll transponiert wer­den (also die Spal­ten zu Zeilen) und es soll eine definierte Anzahl von (leeren) Spal­ten in der anschließend zweizeili­gen Tabelle nach jed­er ursprünglichen Zeile einge­fügt sein. In der Muster-Datei des Fragestellers ist das sehr gut erkennbar.

Erste Schritte

Die Aus­gangslage (hier in mein­er Datei):

Die Beispiel-Aus­gangslage

Der Bere­ich A2:B9 ist bere­its als Tabelle for­matiert und kann darum ohne weit­ere Vorar­beit in den Pow­er Query-Edi­tor importiert wer­den. Im ersten Schritt ist es für mich (und für Sie) wichtig, die Anzahl der Daten­zeilen (der Daten­sätze) festzustellen. Natür­lich reicht ein Blick in den Edi­tor, denn neben der unter­sten Zeile ist ja auch die Zeilen­num­mer ver­merkt. Da diese Tabelle/Liste aber dynamisch gestal­tet wer­den soll, muss dieser numerische Wert in irgend ein­er Form fest­ge­hal­ten, gespe­ichert wer­den. Um das zu erre­ichen gehen Sie so vor:

  • Falls Sie das linke Seit­en­fen­ster mit den Abfra­gen nicht sehen, blenden Sie es ein.¿
  • Recht­sklick auf den einzi­gen Ein­trag Tabelle1 und wählen Sie im Kon­textmenü Ver­weis.
  • Geben Sie dieser neuen Abfrage den Namen AnzZeilen.
  • Markieren Sie die Spalte Dat­en, Recht­sklick in die Über­schrift und im Kon­textmenü ein Klick auf Drill­down aus­führen.
  • Im recht­en Seit­en­fen­ster bei Angewen­dete Schritte wurde der Schritt Daten1 (bzw. in Ver­sion 2016 Nav­i­ga­tion)einge­fügt, die Abfrage beste­ht nur noch aus ein­er Spalte mit der Über­schrift Liste.
  • Markieren Sie diese Spalte durch einen Klick in die Über­schrift, Sym­bol Sta­tis­tiken | Werte zählen.
  • Spe­ich­ern Sie diese Abfrage jet­zt über Schließen & laden in… als Nur Verbindung, damit diese Liste später nicht in einem eige­nen Arbeits­blatt gespe­ichert son­dern nur im Arbeitsspe­ich­er gehal­ten wird.
  • Öff­nen Sie wieder den Pow­er Query-Edi­tor und wech­seln Sie erforder­lichen­falls zu Abfrage Tabelle1.

▲ nach oben …

Zwischenergebnis als Liste/Tabelle

Damit sind die Vorar­beit­en prinzip­iell erledigt. Im näch­sten Schritt wer­den Sie eine ganz neue Tabelle erstellen welche im End­ef­fekt so viele leere Zelle enthält, wie später leere Spal­ten erzeugt wer­den sollen. Also bei den 7 Daten­sätzen der ursprünglichen Abfrage jew­eils 2, also gesamt 14 Daten­sätze. Dazu gehen Sie über Menü Start, Gruppe Neue Abfrage | Neue Quelle | Andere Quellen | Leere Abfrage. Im linken Seit­en­fen­ster wird ein Ein­trag Abfrage1 erstellt und das Haupt­fen­ster, wo typ­is­cher­weise die Dat­en der Abfrage sicht­bar sind, ist abso­lut leer.

Ober­halb dieser großen grauen Fläche ist nur das leere Textfeld für die Formeln zu sehen. Geben Sie hier in die Eingabezeile fol­gende Formel ein­schließlich des führen­den Gle­ich­heit­sze­ichens ein:  = {1..AnzZeilen * 2}. Hin­weis: Da es auf dem Bild­schirm nicht immer opti­mal erkennbar ist, es han­delt sich bei dieser Formel um die geschweiften Klam­mern, welche Sie über Alt­Gr7 und Alt­Gr0 ein­fü­gen kön­nen. Umge­hend wird eine Liste mit den Zahlen 1 bis 14 erstellt.

Sie fra­gen sich nun vielle­icht, wieso, warum, weshalb … Grund­sät­zlich soll eine Liste erzeugt wer­den, wo bezo­gen auf die Anzahl der existieren­den Daten­sätze (in diesem Fall 7) jew­eils 2 leere Zellen/Zeilen erzeugt wer­den. Hät­ten Sie sich die Anzahl der Daten­sätze nur gemerkt und nicht in ein­er Abfrage gespe­ichert dann würde sich die Formel so darstellen: = {1..7*2}. Pow­er Query erken­nt alleine, dass das zweite Argu­ment die Mul­ti­p­lika­tion 7*2 ist und führt die Berech­nung durch, bevor der Teil der Formel nach den bei­den Punk­ten (..) aus­ge­führt wird. Und der Wert 7 wird bei der eigentlichen Formel aus der gespe­icherten Liste AnzZeilen geholt.

Da Sie (in diesem Fall) 14 leere Zellen haben wollen, Klick­en Sie im Menüband auf Zu Tabelle und im näch­sten Schritt soll­ten Sie auch gle­ich den Namen dieser Abfrage auf Leerzeilen ändern. Dass in der einzi­gen Spalte die numerischen Werte von 1 bis 14 ste­hen, ist richtig und erwün­scht. Fügen Sie nun über Spalte hinzufü­gen | Benutzerdefinierte Spalte eine neue Spalte ein und als Über­schrift ver­wen­den Sie Dat­en. In das Feld für Benutzerdefinierte Spal­tenformel tra­gen Sie nach dem bere­its existieren­den = nur in Klein­schrift den Wert null ein. OK und anschließend ent­fer­nen Sie die erste Spalte Column1, Sie brauchen ja nur die 14 Zeilen mit dem Wert null (also leer).

▲ nach oben …

Durch Transponieren zum Ziel

Wech­seln Sie nun wieder zur Abfrage Tabelle1. Menü Start, Gruppe Kom­binieren | Abfra­gen anfü­gen und wählen Sie bei Anzufü­gende Tabelle die Abfrage Leerzeilen. Danach stellt sich die ursprüngliche Abfrage so dar:

Die gewün­schte Zahl von Leerzeilen wurde ange­fügt

Im fol­gen­den Schritt wer­den Sie dafür sor­gen, dass je zwei von diesen Leerzeilen nach jed­er der (noch) 7 ersten Zeilen der ehe­ma­li­gen Über­schriften einge­fügt bzw. ver­schoben wer­den. Im ersten Schritt gehen Sie über Spal­ten hinzufü­gen | Indexs­palte einen Index, welch­er mit 0 begin­nt. Weit­er­hin im Menü Spalte hinzufü­gen markieren Sie nun die Spalte Index und in der Gruppe Aus Zahl wählen Sie Stan­dard | Mod­u­lo. In das Feld Wert geben Sie erst ein­mal den Wert 2 ein; das ist nur ein Platzhal­ter, damit Pow­er Query nach dem Abschluss eine funk­tion­ierende Formel und ein darauf basieren­des Ergeb­nis erstellen kann. Das Ergeb­nis:

Das Ergeb­nis, der Dum­my-Wert 2 ist von mir gelb gemark­ert wor­den

Sie sehen, dass eine Art Grup­pierung in Zweier­grup­pen erstellt wor­den ist. Es bieten sich nun zwei unter­schiedliche Wege an, die gle­icher­maßen zum Ziel der dynamis­chen Grup­pen­größe führen. Entwed­er Sie ändern direkt in der Eingabezeile den (von mir gelb markierten) Wert 2 zu AnzZeilen und Klick­en dann irgend­wo in den grauen Bere­ich darunter. Oder Sie führen alter­na­tiv im recht­en Seit­en­fen­ster einen Dop­pelk­lick auf die zulet­zt erstellte Zeile Rest einge­fügt durch, löschen im Edi­tor die 2 und schreiben stattdessen den Namen der Liste AnzZeilen an die Stelle. Nach einem OK wer­den Sie erken­nen, dass in der Spalte Mod­u­lo Grup­pen in jen­er Größe gebildet wor­den sind, die vorher in der Abfrage/Liste AnzZeilen berech­net wor­den ist.

Um die Leerzeilen an die gewün­scht­en Stellen zu posi­tion­ieren, sortieren Sie zu Beginn die Spalte Mod­u­lo auf­steigend. Anschließend sortieren Sie nun auch noch die Spalte Index auf­steigend und das Ergeb­nis passt. Ent­fer­nen Sie nun auf beliebige Weise die bei­den let­zten Spal­ten, sodass nur Dat­en und Zahlen erhal­ten bleiben. Wech­seln Sie nun zum Menü Trans­formieren und Klick­en in der Gruppe Tabelle auf den Ein­trag Ver­tauschen. Dieser Vor­gang entspricht dem, was Sie in Excel unter Transponieren ken­nen.

Schließen & laden und Sie wer­den ver­mut­lich sehen, dass Sie nichts sehen. 😉 Der Abfrage-Edi­tor ist zwar geschlossen und Sie befind­en sich in der Excel-Arbeitsmappe aber die eben gener­ierte Kreuzta­belle mit den entsprechen­den Leerspal­ten ist wed­er im aktuellen Blatt noch in einem geson­dert erzeugten Sheet zu sehen. Das liegt daran, dass Sie vorher die Abfrage AnzZeilen im Modus Schließen & laden in… | Als Verbindung gesichert haben und Pow­er Query die anderen Abfra­gen automa­tisch auch in diesem Modus geschal­tet hat. Falls Ihnen nicht gegen­wär­tig ist, wie Sie diese eine Tabelle1 sicht­bar an gewün­schter Posi­tion platzieren kön­nen, sehen Sie ein­fach ein­mal hier in unserem Blog nach.

Anmerkung: Genau­so „eigen­willig” und aus mein­er Sicht auch regel­widrig wie die kom­plett leeren Spal­ten in ein­er Kreuzta­belle ist der Wun­sch des Fragestellers, das Ergeb­nis (auch noch) ohne Über­schriften darzustellen. Die eine Möglichkeit ist dann natür­lich, die kom­plette Zeile auszublenden. Das wäre aber nicht so gut, wenn irgend­wo in diesem Arbeits­blatt links oder rechts in dieser Zeile noch Werte ste­hen, die sicht­bar bleiben sollen. Die zweite Möglichkeit sehe ich darin, dass Sie in der Excel-Tabelle die Über­schriften alle mit dem Benutzerdefinierten Zahlen­for­mat ;;; verse­hen und damit unsicht­bar und auch nicht druck­bar machen; dann noch das Tabel­len­for­mat so anpassen, dass wed­er Über­schriften noch die Fil­ter-Schalt­flächen sicht­bar sind. Da wäre dann aber händis­che Nachar­beit erforder­lich, wenn sich die Anzahl der Spal­ten der Kreuzta­belle erhöht. Die sauber­ste und damit beste Möglichkeit ist natür­lich, noch ein­mal in den Pow­er Query-Edi­tor zu wech­seln und dort die Über­schriften mit einem jew­eils ein­ma­li­gen und sin­nvollen Text zu gestal­ten.

Fer­tig. – Es bleibt bei mir das Unbe­ha­gen, dass ich dort eine Auf­gabe gelöst habe, die ich an sich für nicht nachvol­lziehbar oder gar unsin­nig erachte. Ich sehe erst ein­mal keinen Sinn darin, ein „Werk” zu erstellen, was gegen mehrere Regeln ein­er ordentlichen Daten­hal­tung ver­stößt. Aber es hat­te mich ein­fach gereizt, solch eine Auf­gaben­stel­lung mit Pow­er Query zu lösen. Und als Idee im Hin­terkopf und eventuelle Prog­nose hat­te ich, dass die leeren Spal­ten im Laufe des Leben­szyk­lus der Tabelle vielle­icht nach und nach mit Dat­en gefüllt und natür­lich dann auch entsprechende Über­schriften in der Titelzeile ste­hen wer­den.

▲ 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 … (← Klick mich!)

Dieser Beitrag wurde unter Entpivotieren, Foren-Q&A, Kreuztabelle, Power Query, PQ-Formeln (Sprache M), Spalten bearbeiten, Transponieren abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.