PQ: Alle/ausgewählte Arbeitsblätter einer Mappe einlesen (2)

Xtract: Mehrere oder auch alle Reg­is­ter (Arbeits­blät­ter) ein­er Arbeitsmappe in die gle­iche Mappe gezielt importieren und auch die Blat­tna­men gezielt auswerten. (Teil 2)

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

Alle oder auch nur ausgewählte Arbeitsblätter/Register der aktuellen Mappe als PQ-Abfrage importieren Teil 2

Der fol­gende Text basiert auf dem ersten Beitrag zu diesem The­ma und schließt naht­los daran an. Die Daten­lage hat sich nur leicht verän­dert, die Vorge­hensweise ist hier eine deut­lich andere.


Okay, also noch ein­mal ganz von vorn. Die Aus­gangslage ist die geöffnete Arbeitsmappe mit den 12 + 1 Reg­is­tern: Jan­u­ar bis Dezem­ber und Feiertage. Diese hat­ten Sie hier herun­terge­laden. Aus diesen Dat­en soll in der gle­ichen Datei auf möglichst kom­fort­able Weise eine Zusam­men­fas­sung aller Blät­ter mit Aus­nahme des Excel-Reg­is­ters Feiertage erfol­gen. Und wie schon ange­sprochen kön­nten es in der Real­ität natür­lich viel, viel mehr Arbeits­blät­ter sein, die kom­plett oder nach bes­timmten Kri­te­rien importiert wer­den sollen. Vie­len der älteren Leser meines Blogs ist Wil­helm Busch und da vor allen Din­gen die Geschichte von Max und Moritz noch in Erin­nerung. Und ein­er der wohl am meis­ten daraus ziti­eten Sätze ist: „Dieses war der erste Stre­ich, doch der zweite fol­gt sogle­ich.” Ich trenne an dieser Stelle den Beitrag und weit­er geht’s dann hier im zweit­en Teil.

▲ nach oben …

Im ersten Schritt erstellen Sie in Excel ein neues Arbeits­blatt und benen­nen Sie dieses zweck­mäßiger­weise Zusam­men­fas­sung. Im Fol­gen­den gehe ich davon aus, dass die ursprüngliche Excel-Datei in fol­gen­dem Pfad liegt: C:\Data\ und Sie im aktuellen Work­book die Dat­en auch von dort geöffnet haben. Wie schon vorher beschrieben kön­nen Sie den Weg über eine PQ-Funk­tion gehen. Nach dem Erstellen ein­er neuen, leeren Abfrage (Dat­en abrufen | Aus anderen Quellen | Leere Abfrage) tra­gen Sie dazu in die Eingabezeile fol­gende Funk­tion ein:
= Excel.Workbook(File.Contents("C:\Data\Kleinbrot_12_Monate.xlsx"), null, true)
(den Pfad müssen Sie naturgemäß bei Bedarf anpassen) und es zeigt sich anschließend dieser Abfrage-Dia­log:

Der Import-Dia­log direkt nach dem Aufruf der Funk­tion

Was mich anfangs mächtig irri­tierte ist die Tat­sache, dass das Blatt Zusam­men­fas­sung gar nicht mit aufgenom­men wurde. Okay, es sind ja noch keine Dat­en enthal­ten, aber es machte mich doch nach­den­kle­ich. Schnell wurde mir aber klar, dass das Blatt gar nicht importiert wer­den kon­nte. Denn mit der Befehlszeile habe ich ja auf die gespe­icherte Ver­sion der Datei zuge­grif­f­en, und dort ist ja noch der Zus­tand ohne das hinzuge­fügte Arbeits­blatt! Und noch etwas fällt mir auf: In Zeile 13 und Zeile 14 gibt es die Namen Feiertage und Feiertage1, in der Spalte Item ist der Ein­trag dieser bei­den Zeilen sog­ar iden­tisch. Allerd­ings find­en Sie die Erk­lärung in der Spalte Kind, denn ein Mal ist es das Arbeits­blatt welch­es ange­sprochen wird und das andere Mal die „intel­li­gente” Tabelle.

Einen gle­ichen Abfrage-Dia­log kön­nen Sie mit eini­gen Schrit­ten mehr aber ohne die M-Funk­tion direkt eingeben zu müssen erre­ichen, wenn sie sich in Excel (beispiel­sweise) im Arbeits­blatt Zusam­men­fas­sung befind­en und über Dat­en | Dat­en abrufen | Aus Datei | Als Excel-Arbeitsmappe exakt die aktuelle, zurzeit hier geöffnete Datei im File-Dia­log auswählen. Da zeigt sich zu Beginn der Nav­i­ga­tor:

Alle Tabellen und Tabel­len­blät­ter der zu impotieren­den Datei

Da Sie ja unter Umstän­den sehr, sehr viele Blät­ter importieren wollen bietet es sich an, erst ein­mal alle existieren­den Sheets der Mappe in eine Abfrage zu importieren, statt Mehrere Ele­mente auswählen anzuhak­en und dann die einzel­nen zu impor­tiren­den Blätter/Tabellen mit einzel­nen Klicks zu markieren. Dazu Klick­en Sie auss­chließlich auf dem ersten Ein­trag mit dem gel­ben Ord­ner-Sym­bol:

Diese Zeile markieren, um alle Ele­mente der Liste zu importieren

…und anschließend Laden ▼ | Laden in… | Nur Verbindung erstellen, um die Dat­en aller Arbeits­blät­ter zu importieren, ohne sie gle­ich in da aktuelle oder ein neues Arbeits­blatt zu spe­ich­ern. Zu diesem Zeit­punkt haben Sie wiederum den gle­ichen Dia­log wie schon vorher beim The­ma M-Funk­tion beschrieben. Eine Aus­nahme zeigt sich aber: Der Name der Abfrage ist nicht Tabelle1 son­dern entspricht dem Namen des importieren Files: Kleinbrot_12_Monate xlsx.

Okay, Sie wis­sen natür­lich, dass die Feiertage nicht gebraucht wer­den. Aber in ein­er anderen Datei kön­nen das ja ganz anders benan­nte Blät­ter sein, beispiel­sweise „Arbeits­frei” oder weit­ere Blät­ter mit beliebi­gen Beze­ich­nun­gen. In dieser vor­liegen­den Kon­stel­la­tion kön­nen Sie auch nach einem anderen Kri­teri­um fil­tern: Die Spalte Kind wer­den Sie so fil­tern, dass auss­chließlich Sheet erhal­ten bleibt. Beacht­en Sie, dass in der Spalte Table alle Ein­träge iden­tisch sind.

Übri­gens: Wenn Sie in der Spalte Data in die Frei­fläche neben dem Ein­trag Table Klick­en, wird unter­halb der Abfrage-Tabelle direkt über der Sta­tuszeile eine Tabelle angezeigt, wo der Inhalt dieses Arbeits­blatts angezeigt wird. Für Kon­trol­lzwecke kann dieses ganz hil­fre­ich sein. – Fil­tern Sie nun noch die Spalte Name oder Item so, dass nur die Monat­sna­men erhal­ten bleiben.

Löschen Sie nun alle Spal­ten außer Data. Erweit­ern Sie diese Spalte und nach Über­nahme der Vor­gabe Start | Erste Zeile als Über­schrift ver­wen­den. Einige Zeilen müssen nun noch gelöscht wer­den, damit nur die rel­e­van­ten Dat­en übrig bleiben. Zu löschen sind leere Zeilen und jene Zeilen, wo in Spalte Datum die ursprünglichen Über­schriften (Summe und Datum) ste­hen. Der ein­fach­ste Schritt wird sein, im Fil­ter bei den entsprechen­den Ein­trä­gen das Häkchen zu ent­fer­nen. Aber es gibt noch einen anderen Weg, der manch­mal hil­fre­ich­er sein kann. Da ja in der ersten Spalte auss­chließlich kalen­darischen Dat­en ste­hen sollen und ste­hen dür­fen, sind ja alle anderen Werte zu ent­fer­nen. Ich zeige Ihnen hier 2 prag­ma­tis­che Möglichkeit­en auf:

  1. Ändern Sie den Daten­typ in Spalte Datum von Beliebig auf Datum. Anschließend per Fil­ter die null-Ein­träge (das sind auch leere Zeilen) und die Fehler (Error) ent­fer­nen. Fer­tig!
  2. Etwas aufwändi­ger aber auch inter­es­sant: Spalte hinzufü­gen | Benutzerdefinierte Spalte. Die Über­schrift kann bleiben oder auch beispiel­sweise Check oder Prü­fung sein. Als Benutzerdefinierte Spal­tenformel geben Sie ein:
    Value.Is([Datum], type date)
    Da wed­er Texte noch leere Zellen den Daten­typ Date haben kön­nen, wer­den die entsprechen­den Zeilen in der neuen Spalte mit False gekennze­ich­net; bei allen echt­en Datum­swerten ste­ht entsprechend True. Jet­zt nach True fil­tern und es bleiben nur noch jene Zeilen in der Abfrage erhal­ten, wo in der ersten Spalte wirk­lich ein Datum ste­ht.
    Und wenn in jed­er Zeile Error ste­ht, was dann und warum? Erst ein­mal das „warum”: Die Spalte Datum hat (gewiss immer noch) den Daten­typ Beliebig; und das gilt für jeden Daten­satz (Zeile), auch wenn dort schön rechts­bündig ein Datum ste­ht. Die Lösung: Entwed­er (wie vorher schon ange­sprochen) den Daten­typ auf Datum ändern oder die eingegebene Formel so ändern: = Value.Is(Date.From([Datum]), type date)
    und anschließend zuerst über Start | Zeilen ver­ringern die Fehler ent­fer­nen und anschließend nach TRUE fil­tern.

Zugegeben, ich set­ze bei solchen Gele­gen­heit­en eigentlich immer die erste Meth­ode ein. Sie ist leichter zu hab­d­haben. Der zweige­nan­nte Weg hat aber auch seinen Charme; ins­beson­dere dann, wenn die Formel noch ein­mal dahinge­hend verän­dert wird, dass in der neuen Spalte entewder das Datum aus der gle­ich­nami­gen Spalte oder einen Error-Wert enthält, wobei anschließend diese Zeilen bequen geöscht wer­den kön­nen. Wenn Sie an der Formel inter­essiert sind, senden Sie mir eine Mail mit dem Betr­e­ff Klein­brot-Nur Datum fil­tern und gegen eine Spende von 2,00 € (Ama­zon-Gutschein oder Pay­Pal Fre­und­schaft für G.Mumme@Excel-ist-sexy.de oder Sie fra­gen nach der Bankverbindung) sende ich Ihnen eine Mail mit der entsprechen­den Formel.

Zum Schluss kön­nen Sie nun noch alle Spal­ten rechts von Son­stiges löschen und (vor­sicht­shal­ber) die erste Spalte auf­steigend nach Datum sortieren. Damit ist das Ziel so gut wie erre­icht. Bleiben eigentlich nur noch 2 Dinge: Die Spalte Datum eventuell noch als Daten­typ Datum for­matieren und die als Nur Verbindung gespe­icherte Abfrage in das Blatt Zusam­men­fas­sung zu posi­tion­ieren. Erforder­lichen­falls find­en Sie hier einen Hin­weis zum Han­dling.

▲ nach oben …

Rück­mel­dun­gen / Feed­back gerne per Mail an mich (G.Mumme@Excel-ist-sexy.de)

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

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 3,00 € freuen … (← Klick mich!)

Dieser Beitrag wurde unter Datum & Zeit, Filtern & Sortieren, Power Query, PQ-Formeln (Sprache M), Spalten bearbeiten abgelegt und mit , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.