Wie kann man in Excel Zahlen extrahieren?

6 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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?


DerMax135 
Beitragsersteller
 05.10.2016, 17:06

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

0
dkilli  05.10.2016, 19:07
@DerMax135

Hallo Schmiddi1967,

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

0
Iamiam  06.10.2016, 13:23
@dkilli

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

0

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-in-microsoft-excel-both-in-cell-and-loops

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





RakonDark  05.10.2016, 16:51

bzw :

regex($dieZelle.value, "^[0-9]+")
0

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!


schmiddi1967  06.10.2016, 16:18

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

2
Iamiam  06.10.2016, 21:27
@schmiddi1967

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)

0

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


Iamiam  06.10.2016, 13:24

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

0