PQ: Ziffern aus Text extrahieren / separieren

Foren-FAQ: Ziffern aus Texten entfernen

Im Her­ber-Excel-Forum wurde die Frage gestellt, wie bes­timmte Ziffern/Zahlen aus einem Text in diversen Zellen ent­fer­nt wer­den kön­nen. Zurzeit, wo ich diesen Beitrag ver­fasse 1) war eine sin­nvolle Antwort gegeben wor­den. Es ist aber nicht auszuschließen, dass alle Zif­fern ent­fer­nt wer­den sollen und nicht nur die im Muster-Text vorgestell­ten (Stand: 1. Antwort). Und ins­beson­dere wenn es große Daten­men­gen sind kann eine Lösung per Pow­er Query aus Grün­den der Geschwindigkeit sin­nvoll sein.

1) Die Veröf­fentlichung dieses Beitrages ist aus organ­isatorischen Grün­den nicht zum Zeit­punkt des Erscheinens der Frage im Forum erfol­gt.

Die PQ-Lösung

Zuvor ange­merkt: Diese The­matik ist unter den gegen­sät­zlichen Bedin­gun­gen (Zahlen sollen extrahiert wer­den) hier im Blog sehr aus­führlich beschrieben, darum ist das Ganze hier eher stich­wor­tar­tig dargelegt.

Da im Beitrag auch keine Muster-xlsx ange­boten wurde son­dern nur 3 Zeilen Text, habe ich die hier ein­fach ein­mal über­nom­men. Sie sind ja leicht per copy/paste in ein Arbeits­blatt einge­fügt und dann als Tabelle for­matiert:

30Hannes70Schmidt
80Klaus20Franz
10Tim30Hannes60Markus

Sie begin­nen natür­lich damit, die Muster-Dat­en (die Tabelle) in Pow­er Query zu importieren. Und Natür­lich dür­fen Sie noch nach Herzenslust eigene Kreatio­nen hinzufü­gen. 😎 

Im ersten Schritt nach dem Import in den Pow­er Query-Edi­tor soll als endgültiges Ziel eine neuen Spalte erstellt wer­den, wo die „ver­schlank­ten” Zeichen­fol­gen aus der ersten Spalte geschrieben sind. – Auch wenn es Ihnen vielle­icht als erstes in den Sinn kommt, 10 Erset­zungsvorgänge nacheinan­der anzus­toßen, das muss es nicht sein. Auch wenn damit garantiert das Ziel erre­icht wer­den würde.

Liste der zu löschenden Zeichen erstellen

Im näch­sten Schritt geht es darum, eine Liste jen­er Zeichen zu erstellen, die gelöscht wer­den sollen, damit alle Zeichen außer den Zahlen/Ziffern übrig bleiben. Das sind naturgemäß die Zif­fern 0 bis 9. Alles andere soll ja erhal­ten bleiben, ein­schließlich eventueller Son­derze­ichen (wenn auch nicht expliz­it erwäh­nt).

Natür­lich kön­nten Sie von Hand eine Excel-Tabelle mit den 10 Zif­fern anle­gen, diese importieren und dann (als Liste) zur weit­eren Auswer­tung nutzen. Aber es geht um einiges ein­fach­er (manch ein­er würde wahrschein­lich auch sagen „ele­gan­ter”). Begin­nen Sie damit, im Reg­is­ter Start | Neue Quelle | Andere Quellen | Leere Abfrage auszuwählen. In die Eingabezeile geben Sie nun fol­gende Formel 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 Eingabe-Taste. Benen­nen Sie die erstellte Liste mit dem automa­tisch erstell­ten Namen (wahrschein­lich Abfrage1) um, damit sie den deut­lich sin­nvolleren Namen Zif­fern (ide­al­er­weise kurz und präg­nant) bekommt. Das stellt sich nun so dar:

Die durch Power Query erzeugte Liste aller Ziffern

Die durch Pow­er Query erzeugte Liste aller Zif­fern

Eine kleine Erk­lärung bin ich Ihnen vielle­icht schuldig: Die Zahlen in der Formel ste­hen für exakt den Wert, welchen Sie in einem Arbeits­blatt als ZEICHEN() – Funk­tion ver­wen­det hät­ten; es sind die ASCII-Num­mern der Zahlen/Ziffern. Im Inter­net kön­nen Sie in diversen Tabellen die Zuord­nung der numerischen Werte zu den Zeichen recher­chieren. Wenn Sie in der Win­dows-Zeichentabelle nach­schla­gen, wer­den Sie wahrschein­lich nur die Hex-Werte bekom­men, die hier nicht zielführend sind (die Sie aber mit dem inte­gri­erten Rech­n­er auch in Dez­i­male Werte umwan­deln kön­nen).

Ide­al­er­weise spe­ich­ern Sie nun diese Liste nicht als Tabelle son­dern so wie sie ist nur als Typ Nur Verbindung erstellen. Dazu entwed­er im Reg­is­ter Start ein Klick auf den Text Schließen &  laden und dann Schließen & laden in… oder Sie gehen über das Reg­is­ter Datei und wählen dort den entsprechen­den Menüpunkt direkt aus.

▲ nach oben …

Die Konvertierung

Jet­zt wer­den Sie direkt dabei gehen und die Werte der einzel­nen Spal­ten so kon­vertieren, dass nur noch die Nicht-Zahlen übrig bleiben, im Nor­mal­fall also die Buch­staben. Und das geht beispiel­sweise so:

  • Wech­seln Sie zum Reg­is­ter Spalte hinzufü­gen und wählen Sie das Sym­bol Benutzerdefinierte Spalte.
  • Geben Sie hier bei Neuer Spal­tenname beispiel­sweise den Text Nur Texte ein.
  • Bei Benutzerdefinierte Spal­tenformel tra­gen Sie diese Formel ein: 
    = Text.Remove([Spalte1], Ziffern)
    und bestäti­gen mit OK. Soll­ten Sie die erste Spalte mit den ursprünglichen Werten (ein­schließlich der Zif­fern) umbe­nan­nt haben, wer­den Sie selb­stver­ständlich den Namen anstatt [Spalte1] ver­wen­den.
  • Schließen & laden, und die Dat­en wer­den in ein neues Tabel­len­blatt in eine Liste / Tabelle geschrieben.

Damit ist die Auf­gabe prinzip­iell erfüllt. Soll­ten Sie auss­chließlich die „bere­inigte” Spalte benöti­gen, löschen Sie in der Abfrage (also im Edi­tor) ein­fach Spalte1.

▲ nach oben …

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

Dann würde ich mich über einen Beitrag (z.B. 1,00€ bis 2,00€) Ihrer­seits freuen …

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.