Wie kann man in Excel Zahlen extrahieren?
In einer Zelle steht ein Text wie "Preis pro 400 g,ml". Nun soll die Zahl (hier: 400) aus diesem Text extrahiert werden, um sie weiter zu verarbeiten. Bisher bin ich so weit:
=TEIL(A1;VERGLEICH(1;ISTZAHL(TEIL(A1;SPALTE(1:1);1)1)1;0);4)
So weit, so gut; aber diese Formel extrahiert nur Zahlen einer bestimmten Länge, welche aber tatsächlich variable Länge hat.
Wie kann man aber nun in Excel die ganze Zahl aus dem Text extrahieren, unabhängig von ihrer Länge? Danke!
6 Antworten
Hey, nim mal diese Formel dort wo die Zahl dann hin soll:
{=VERWEIS(9^9;--TEIL(A1;MIN(WENN(ISTZAHL(--TEIL(A1;SPALTE(1:1);1));SPALTE(1:1)));SPALTE(1:1)))}
Das ist eine Matrixformel.
Das bedeutet: Die geschweiften Klammern
{} NICHT mit eingeben, sondern die Eingabe der Formel NICHT mit ENTER
abschließen, sondern mit:
STRG & SHIFT & ENTER (alle drei gleichzeitig).
DAS erzeugt die { } und macht die Formel zu einer Matrixformel.
Sollte klappen oder?
Hallo Schmiddi1967,
ich habe deine Lösung nicht gelesen. Daher hast du die Hilfreichste Antwort verdient
RegEx wäre wohl am sinvollsten .
Wie man das schöne Stück seinem Workbook hinzufügt steht
dann brauchst du nur noch die funktion und dann sowas wie
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = "^[0-9]+
"
End With
findet alle zahlen vom Anfang geht aber auch in der Mitte etc etc .
RegEx ist ein mächtiges Text such Werkzeug
In A2 steht der String. Dann gibst du in einer Zelle folgendes ein;
=VERWEIS(9^9;1*TEIL(A2;MIN(WENN(ISTZAHL(1*TEIL(A2;SPALTE(1:1);1));SPALTE(1:1)));SPALTE(1:1)))
Das ist eine Matrixformel die darfst du nicht mit Enter abschließen!
Du musst STRG + Shift (Umschalt) + Enter drücken. Dann siehst du am Anfang und am Ende geschweichte Klammern. Also
{=VERWEIS(9^9;1*TEIL(A2;MIN(WENN(ISTZAHL(1*TEIL(A2;SPALTE(1:1);1));SPALTE(1:1)));SPALTE(1:1)))}
Formel von Schmiddi: ich versuchs mal zu erklären (wegen der höheren Zeilenlänge in einer separaten AW, siehe dort)
Formel von Schmiddi: Basis-Eintrag: 'AB D1,23 JKL
- generell:
- 1. Verweis sucht bei Nichtfinden von 9^9 die nächstniedrigere Zahl (9^9 wurde willkürlich festgelegt, tatsächliche Obergrenze ist 9,999...*10^15)
- 2. -- bedeutet im Effekt: *-1*-1. Das wandelt Ziffern zu Zahl um und erzeugt bei anderen Zeichen einen Fehler =>Nicht(Istzahl())
- 3. {Spalte(1:1)} erzeugt eine Laufzahl - ich nenne sie iF n- von 1...höchste Spaltenzahl im Blatt
- Nun von innen nach aussen:
- ISTZAHL(--TEIL(A1;SPALTE(1:1);1)) prüft, ob die n-te Stelle eine Ziffer (==>Zahl) ist
- Wenn ja, wird diese Ziffer gelistet, wenn nicht: das sonst-Argument fehlt, das ergibt dann FALSCH
- {FALSCH.FALSCH.FALSCH.FALSCH.5.FALSCH.7.8.FALSCH.FALSCH……}
- Falsch wird von Min() ignoriert. Min(...) ergibt also die Position der ersten Ziffer [iF.: MinPos].
- --Teil(A1;MinPos;n) erhöht nun schrittweise die Länge ab MinPos und erzeugt so diese Matrix: 1=1; 1,=1; 1,2; 1,23; #WERT!; #WERT!;.....,
- also {1.1.1,2.1,23.#WERT!.#WERT!.....}
- Offensichtlich wird Vergleich von den vielen folgenden #WERT! nicht gestört,
- =Vergleich(9^9;{...}) findet als höchste Zahl also 1,23
- Weitere Zahlen nach anderen Zeichen dazwischen werden so nicht erfasst
So, damit ist mir das auch selbst erst mal klar geworden!
noch eine Korrektur bzgl der größten Zahl: die ist viel höher: ~10^308, vermutlich 2^1024-1, was man aber so in xl schon nicht mehr rechnen kann. Als Dualzahl 23 x die 1
Tut aber nichts zum eigentlichen Thema, nur, damit nichts Falsches stehen bleibt. Also bei mir funktioniert noch =Verweis(10^308;.....) Gerechnet wird aber "nur" mit 15 Stellen Genauigkeit. Die Zahl im Text dürfte also mindestens 307 Zeichen lang sein.
Minuszeichen im Text werden nicht ausgewertet, ebenso nicht eine Exponentialschreibweise 10^2, da erscheint nur 10 (logisch, aber nicht unbedingt sofort vorhersehbar)
Hallo,
schau mal hier: http://www.excelformeln.de/formeln.html?welcher=102
LG, Chris
Falls du Zeit haben solltest, könntest du mir es evtl. erklären? Würde es nämlich gerne verstehen, um in Zukunft selbst derartiges machen zu können ;)