Frage von DerMax135, 90

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!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von schmiddi1967, Community-Experte für Excel, 60

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?

Kommentar von DerMax135 ,

Funktioniert, danke!

Kommentar von schmiddi1967 ,

gerne :)

Kommentar von DerMax135 ,

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 ;)

Kommentar von dkilli ,

Hallo Schmiddi1967,

ich habe deine Lösung nicht gelesen. Daher hast du die Hilfreichste Antwort verdient

Kommentar von Iamiam ,

Formel von Schmiddi: ich versuchs mal zu erklären (wegen der höheren Zeilenlänge in einer separaten AW, siehe dort)

Antwort
von RakonDark, 48

RegEx wäre wohl am sinvollsten .

Wie man das schöne Stück seinem Workbook hinzufügt steht

dort http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex...

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




Kommentar von RakonDark ,

bzw :

regex($dieZelle.value, "^[0-9]+")
Expertenantwort
von Iamiam, Community-Experte für Excel, 19

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!

Kommentar von schmiddi1967 ,

Danke Iamiam, ich hätte das so gut nicht erklären können. *Top*

Kommentar von Iamiam ,

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)

Expertenantwort
von dkilli, Community-Experte für Computer, 14

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)))}

Kommentar von Iamiam ,

Formel von Schmiddi: ich versuchs mal zu erklären (wegen der höheren Zeilenlänge in einer separaten AW, siehe dort)

Antwort
von Schilduin, 40

Besser wäre von vornherein die Zahlen in einer anderen Zelle zu schreiben und diese dann in den Text zu integrieren.

Antwort
von Funfroc, 36

Hallo,

schau mal hier: http://www.excelformeln.de/formeln.html?welcher=102

LG, Chris

Keine passende Antwort gefunden?

Fragen Sie die Community