PQ: Ziffern aus Text extrahieren / separieren

Foren-FAQ: Ziffern aus Texten entfernen

Im Her­ber-Excel-Forum wur­de die Fra­ge ge­stellt, wie bes­timmte Zif­fern/Zah­len aus ei­nem Text in di­ver­sen Zel­len ent­fer­nt wer­den kön­nen. Zur­zeit, wo ich die­sen Bei­trag ver­fasse 1) war eine sin­nvolle Ant­wort ge­ge­ben wor­den. Es ist aber nicht aus­zu­schlie­ßen, dass alle Zif­fern ent­fer­nt wer­den sol­len und nicht nur die im Mus­ter-Text vorgestell­ten (Stand: 1. Ant­wort). Und ins­beson­dere wenn es gro­ße Daten­men­gen sind kann eine Lö­sung per Pow­er Que­ry aus Grün­den der Ge­schwin­dig­keit sin­nvoll sein.

1) Die Veröf­fentlichung die­ses Bei­tra­ges ist aus organ­isatorischen Grün­den nicht zum Zeit­punkt des Er­schei­nens der Fra­ge im Fo­rum erfol­gt.

Die PQ-Lö­sung

Zu­vor ange­merkt: Die­se The­matik ist un­ter den gegen­sät­zlichen Bedin­gun­gen (Zah­len sol­len ex­tra­hiert wer­den) hier im Blog sehr aus­führlich be­schrie­ben, dar­um ist das Gan­ze hier eher stich­wor­tar­tig dar­ge­legt.

Da im Bei­trag auch kei­ne Mus­ter-xlsx ange­boten wur­de son­dern nur 3 Zei­len Text, habe ich die hier ein­fach ein­mal über­nom­men. Sie sind ja leicht per copy/pas­te in ein Arbeits­blatt einge­fügt und dann als Ta­bel­le for­matiert:

30Han­nes70­Schmidt
80Klaus20Franz
10­Tim30Han­nes60­Mar­kus

Sie begin­nen natür­lich da­mit, die Muster-Dat­en (die Ta­bel­le) in Pow­er Que­ry zu im­por­tie­ren. Und Natür­lich dür­fen Sie noch nach Her­zens­lust ei­ge­ne Kreatio­nen hinzufü­gen. 😎 

Im ers­ten Schritt nach dem Im­port in den Pow­er Que­ry-Edi­tor soll als end­gül­ti­ges Ziel eine neu­en Spal­te er­stellt wer­den, wo die „ver­schlank­ten” Zeichen­fol­gen aus der ers­ten Spal­te ge­schrie­ben sind. – Auch wenn es Ih­nen vielle­icht als ers­tes in den Sinn kommt, 10 Erset­zungsvorgänge nacheinan­der anzus­toßen, das muss es nicht sein. Auch wenn da­mit ga­ran­tiert das Ziel erre­icht wer­den wür­de.

Lis­te der zu lö­schen­den Zei­chen er­stel­len

Im näch­sten Schritt geht es dar­um, eine Lis­te jen­er Zei­chen zu er­stel­len, die ge­löscht wer­den sol­len, da­mit alle Zei­chen au­ßer den Zah­len/Zif­fern üb­rig blei­ben. Das sind na­tur­ge­mäß die Zif­fern 0 bis 9. Al­les an­de­re soll ja erhal­ten blei­ben, ein­schließlich even­tu­el­ler Son­derze­ichen (wenn auch nicht expliz­it erwäh­nt).

Natür­lich kön­nten Sie von Hand eine Ex­cel-Ta­bel­le mit den 10 Zif­fern anle­gen, die­se im­por­tie­ren und dann (als Lis­te) zur weit­eren Auswer­tung nut­zen. Aber es geht um ei­ni­ges ein­fach­er (manch ein­er wür­de wahrschein­lich auch sa­gen „ele­gan­ter”). Begin­nen Sie da­mit, im Reg­is­ter Start | Neue Quel­le | An­de­re Quel­len | Lee­re Ab­fra­ge aus­zu­wäh­len. In die Ein­ga­be­zei­le ge­ben Sie nun fol­gende For­mel mit dem führen­den Gle­ich­heit­sze­ichen (mit oder ohne Zeilenum­bruch) ein:
= List.Transform({48..57}, each Character.FromNumber(_))
und bestäti­gen mit der Ein­ga­be-Tas­te. Benen­nen Sie die er­stell­te Lis­te mit dem automa­tisch erstell­ten Na­men (wahrschein­lich Ab­fra­ge1) um, da­mit sie den deut­lich sin­nvolleren Na­men Zif­fern (ide­al­er­weise kurz und präg­nant) be­kommt. Das stellt sich nun so dar:

Die durch Power Query erzeugte Liste aller Ziffern

Die durch Pow­er Que­ry er­zeug­te Lis­te al­ler Zif­fern

Eine klei­ne Erk­lärung bin ich Ih­nen vielle­icht schul­dig: Die Zah­len in der For­mel ste­hen für ex­akt den Wert, wel­chen Sie in ei­nem Arbeits­blatt als ZEI­CHEN() – Funk­tion ver­wen­det hät­ten; es sind die ASCII-Num­mern der Zah­len/Zif­fern. Im Inter­net kön­nen Sie in di­ver­sen Ta­bel­len die Zuord­nung der nu­me­ri­schen Wer­te zu den Zei­chen recher­chieren. Wenn Sie in der Win­dows-Zeichentabelle nach­schla­gen, wer­den Sie wahrschein­lich nur die Hex-Wer­te bekom­men, die hier nicht ziel­füh­rend sind (die Sie aber mit dem inte­gri­erten Rech­n­er auch in Dez­i­male Wer­te umwan­deln kön­nen).

Ide­al­er­weise spe­ich­ern Sie nun die­se Lis­te nicht als Ta­bel­le son­dern so wie sie ist nur als Typ Nur Ver­bin­dung er­stel­len. Dazu entwed­er im Reg­is­ter Start ein Klick auf den Text Schlie­ßen &  la­den und dann Schlie­ßen & la­den in… oder Sie ge­hen über das Reg­is­ter Da­tei und wäh­len dort den entsprechen­den Me­nü­punkt di­rekt aus.

▲ nach oben …

Die Kon­ver­tie­rung

Jet­zt wer­den Sie di­rekt da­bei ge­hen und die Wer­te der einzel­nen Spal­ten so kon­vertieren, dass nur noch die Nicht-Zah­len üb­rig blei­ben, im Nor­mal­fall also die Buch­staben. Und das geht beispiel­sweise so:

  • Wech­seln Sie zum Reg­is­ter Spal­te hinzufü­gen und wäh­len Sie das Sym­bol Be­nut­zer­de­fi­nier­te Spal­te.
  • Ge­ben Sie hier bei Neu­er Spal­tenname beispiel­sweise den Text Nur Tex­te ein.
  • Bei Be­nut­zer­de­fi­nier­te Spal­tenformel tra­gen Sie die­se For­mel ein: 
    = Text.Remove([Spalte1], Ziffern)
    und bestäti­gen mit OK. Soll­ten Sie die ers­te Spal­te mit den ur­sprüng­li­chen Wer­ten (ein­schließlich der Zif­fern) umbe­nan­nt ha­ben, wer­den Sie selb­stver­ständlich den Na­men an­statt [Spal­te1] ver­wen­den.
  • Schlie­ßen & la­den, und die Dat­en wer­den in ein neu­es Tabel­len­blatt in eine Lis­te / Ta­bel­le ge­schrie­ben.

Da­mit ist die Auf­gabe prinzip­iell er­füllt. Soll­ten Sie auss­chließlich die „bere­inigte” Spal­te benöti­gen, lö­schen Sie in der Ab­fra­ge (also im Edi­tor) ein­fach Spal­te1.

▲ nach oben …

Hat Ih­nen der Bei­trag ge­fal­len?
Er­leich­tert die­ser Bei­trag Ihre Ar­beit?

Dann wür­de ich mich über ei­nen Bei­trag (z.B. 1,00€ bis 2,00€) Ihrer­seits freu­en …

Dieser Beitrag wurde unter Allgemein, Verschiedenes, Foren-Q&A, Ohne Makro/VBA, Power Query, PQ-Formeln (Sprache M), Text-Behandlung abgelegt und mit , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.