Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zahl aus Text extrahieren

Zahl aus Text extrahieren
17.12.2018 18:01:01
Domi
Hallo zusammen,
ich möchte die erste Zahl aus einem längeren String extrahieren. Der String enthält manchmal mehrere Zahlen und die Zahlen sind nicht eindeutig (durch ein bestimmtes Zeichen) von den anderen Zeichen abgrenzbar.
z.B.: asdad123)sdds2112xsd()1223121 ==> 123 soll ausgelesen werden
EuS 121.12 (SAkjf), F19 3434, sdjsk ==> 121.12 soll ausgelesen werden
EUNSOE 532.34, fsdfsj3412 fd3 ==> 532.34 soll ausgelesen werden
Ich habe zu dem Thema schon etwas im Internet gefunden, allerdings gibt diese Funktion nur die erste Zahl ohne Nachkommastellen. Ich bräuchte sie aber mit Nachkommastellen.
Function ZahlAusText(Zelle As Range) As Variant Dim x As String Dim i As Integer Dim Pos1 As Integer, Pos2 As Integer Dim Rc As Variant ZahlAusText = "" x = Zelle.Value Do For i = 1 To Len(x) If IsNumeric(Mid(x, i, 1)) Then Pos1 = i Pos2 = i Exit For End If Next i If Pos1 = 0 Then Rc = "" Exit Do End If If Pos1 http://www.excel-ist-sexy.de/zahl-aus-text-extrahieren/
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahl aus Text extrahieren
17.12.2018 18:06:45
Sepp
Hallo Domi,
Zahl von Text trennen - Zahl steht in der Mitte oder Text steht in der Mitte (102)
Tabelle1

 ABC
1 asdad123)sdds2112xsd()1223121 123 
2EuS 121.12 (SAkjf), F19 3434, sdjsk 121,12 
3EUNSOE 532.34, fsdfsj3412 fd3 532,34 
4   

Formeln der Tabelle
ZelleFormel
B1{=VERWEIS(9^99;1*TEIL(WECHSELN(A1;".";","); MIN(WENN(ISTZAHL(1*TEIL(WECHSELN(A1;".";","); SPALTE(1:1); 1)); SPALTE(1:1))); SPALTE(1:1)))}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Zahl aus Text extrahieren
17.12.2018 18:36:28
Domi
Hallo Sepp,
vielen Dank erstmal
Die Ergbnisse sehen sehr gut aus.
Wie würde das denn in VBA aussehen, wenn ich den String in einer Variable gespeichert habe?
AW: Zahl aus Text extrahieren
17.12.2018 18:15:29
Daniel
Hi
Ersetze mal jedes IsNumeric(Mid(x, i, 1))
Durch Mid(x, i, 1) like "[0-9.]"
Und das Rc = CLng(...)
Durch Rc = Val(...)
Gruß Daniel
Anzeige
AW: Zahl aus Text extrahieren
17.12.2018 18:30:51
Domi
Vielen Dank schon mal
Es funktioniert jetzt zum Teil. Zumindest die Nachkommastellen werden mit angegeben.
Aber bei ein paar Strings scheint er noch Probleme zu haben
zum Beispiel:
"Pp. : EUR 49.90, EUR 51.30 (AT), sfr 74.90"
anstatt 49.90 kommt 0 raus
oder bei
"kart. : DM 9.80"
kommt auch 0 raus
Anzeige
AW: Zahl aus Text extrahieren
17.12.2018 19:56:19
Daniel
Könnte sein, dass da der erste Punkt stört.
Dann müsstest du prüfen, ob jeweilige Zeichen eine Ziffer ist oder ein Punkt mit einer Ziffer davor und danach
Mid(x, i, 1) like "#" Or Mid(x, i - 1, 3) like "#.#"
Gruß Daniel
AW: Zahl aus Text extrahieren
19.12.2018 18:51:03
Domi
Danke Daniel :)
Wenn ich das einfüge, bekomme ich einen Laufzeitfehler 5. Ungültiger ProzeduraufrufArgument.
Wo muss ich die Bedingung im Code (vom 1. Beitrag) am besten eintragen, damit es funktioniert?
Gruß Domi
Anzeige
AW: Zahl aus Text extrahieren
19.12.2018 19:03:16
Daniel
hatte ich doch geschrieben:
anstelle von "IsNumeric(Mid(x, i, 1))", wo immer du das im Code verwendest.
allerdings hast du das Problem, dass du dann die Schleife über die Anzahl der Zeichen erst bei zwei beginnen darf, sondst funktioniert das mit dem Mid(x, i - 1, 3) nicht, die Startposition muss größer gleich 1 sein.
For i = 2 len(x)
solange immer ein Text vor der ersten Ziffer steht, ist das aber kein Problem.
nur wenn es vorkommen könnte, dass die auszuwertende Zahl auch mal ganz am Anfang steht, müsste man dem text noch ein Zeichen hinzufügen:
 x = "_" & Zelle.Value
wenn dir das zu kompliziert wird, schau dir mal die Lösung in meinem anderen Beitrag an, denn im Prinzip reicht es aus, die Postition der ersten Ziffer zu finden, da die Umwandlungsfunktion VAL auch in der Lage ist, einen Text wie "123.45abcde" in die Zahl 123,45 zu wandel, so dass man das Ende der ersten Zahl nicht selber suchen muss.
Gruß Daniel
Anzeige
Seit nunmehr 13 Jahren findet sich eine UDF ...
17.12.2018 20:57:30
Luc:-?
…im Herber-Archiv, die deine ZielVorgaben erfüllt, Domi;
eine UDF ist ein VBA-basiertes Pgm, das idR sowohl in ZellFmln als auch in SubProzeduren eingesetzt wdn kann. Du wirst kaum mal erle­ben, dass einer der eifrigen AWer auf anderes als seine eigenen Kreationen verweist, weil er sich die Standorte der anderen idR nicht merkt, wenn er eine eigene hat. Dagg verweisen die FmlFreaks eher mal auf Standorte für Fml­Lösungen, die aber im Falle von excel­for­meln.de gänzlich UDF-frei sind. Die meisten VBA-Kundigen ziehen es vor, sich per Eigen­Pgmmierg an einer Lösung zu versuchen, egal, ob bereits eine solche Lösung existiert oder eben nicht.
Wenn du also nicht im Archiv recherchierst, wirst du idR eine erstbeste Lösung erhalten, die nicht unbedingt die beste sein muss (aber ggf sein kann). Wer eine optimale Lösung will, muss bekanntlich vgln; das ist nicht nur bei Einkauf und Häuserbau so… ;-]
Deine Fml könnte dann so lauten: =INDEX(VSplit(MaskOn(A1;"zw");;1);1)
Die UDF VSplit könnte dabei ggf durch eine neue XlFkt auf der Basis von Text-in-Spalten ersetzt wdn (sollte in deinem Abo enthalten sein) oder du musst direkt die entsprd VBA-Befehle benutzen, wenn zuvor die UDF MaskOn angewendet wurde.
Übrigens, falls bei dir Pkt als DezimalTrenner eingestellt ist, entstehen so gleich echte Zahlen (keine ZahlTexte).
Gruß, Luc :-?
Anzeige
Prinzipiell gebe ich dir...
20.12.2018 10:02:43
Case
Hallo Luc:-?, :-)
... recht. Insbesondere bei der "Stringmanipulation" kann es lästig werden, bei jeder kleinen Änderung der Gegebenheiten, eine neue UDF zu schreiben. Bei dieser Aufgabe habe ich eine bestehende UDF genommen und nur das "Pattern" angepasst - und prompt "... As String" vergessen in "... As Double" zu ändern.
Ich präferiere hier allerdings "RegExp". Im Moment tüftle ich an einer - mehr oder weniger - universell einsetzbaren UDF auf Basis der Regulären Ausdrücke. Mit "Optionalen Parametern", welche eine einfach oder mehrfache Ausgabe und diverse Einstellungen (Global, MultiLine...) zulassen. Am Ende soll nur noch das "Pattern" geändert bzw. als Parameter übergeben werden.
Nicht so universell wie deine UDFs, aber für mich ist das mehr Spaß am Jagdtrieb.
In diesem Sinne - ein besinnliches Weihnachtsfest und einen guten Rutsch in 2019. ;-)
Servus
Case

Anzeige
Ja, danke für Deinen Kommentar, ...
22.12.2018 02:07:57
Luc:-?
…Ralf,
der in diesem Thread ein Lichtblick ist. Ich hatte mir mal Deine/n WebSite/Blog angesehen und weiß nun natürlich, dass Dein Schwerpkt auf Bausteinen und Lösungen für Office-Automatisierung liegt (sehr fleißig!). Das allermeiste davon würde bei meiner InteressenLage unter mach ich, wenn ich's brauche (falls ich's auch kann!) laufen, denn ich hatte zwar auch mal mit SubProzedur-Pgmmierung ange­fan­gen, bin aber, vor ca 15-16 Jahren beginnend, zunehmend bei UDF-Pgmmierung gelandet, weil das die Nahtstelle zwischen VBA- und Fml-Welt ist und hier mitunter Dinge zu entdecken sind, die eines pgm-technischen Verständnisses bedürfen, um annähernd oder gar in Gänze durchschaubar zu wdn. Gerade auch die Unterschiede bei ZellFml- und Prozedur-Anwendung können sehr interessant wdn und dazu beitragen, zu verstehen, wie Xls FmlText-Interpretation fktioniert. Interessant wären auch Alternativen zu der in Xl gewählten Methode. Außerdem ist immer wieder faszinierend, dass man so auch auf AlleinStellungsmerkmale von Xl ggüber anderer Calc-Software stoßen kann.
Die Verwendung von RegEx-Patterns ist natürlich eleganter (meine UDF ist ja auch schon ca 15 Jahre alt und in letzter, unpublizierter Version - vor ca 9 Jahren - nur noch auf ZellAdressen und vorgebbare ErsatzZeichen erweitert worden), aber erfordert uU auch detail­lierte Kenntnisse vom Nutzer, falls die Patterns individuell vorgebbar sein sollen, weshalb ich mich noch nicht für so etwas entschieden habe. Das Maximum des vorgebbar Zumutbaren schien mir das Pattern zum Like-Operator in VBA zu sein (UDF VLike).
Ja, Spaß muss sein, und „Jagdtrieb“ interpretiere ich mal als Wissenwollen (Jagdhunde - keinen Schlittenhund wie Du ;-) - hatte mein Großvater als er einst in Preußisch-Brandenburgischen Wäldern aktiv war, sehr lange her) und geistessportlichen Ehrgeiz. Besonders interessant wird's bei Problemen, die normalerweise nicht (oder zumindest nicht allein) per UDF zu lösen sind. Deshalb findet auch jede halbwegs universelle UDF, die also möglichst weitgehend argumentiert wdn kann und wie die meisten Xl-Fktt auch Datenfelder aus Aus­drücken als Argument zulässt und damit auch mit anderen Xl-Fktt und UDFs zusammenarbeiten kann, meine Zustimmung. Allerdings arbeite ich zZ an einer Basis-UDF, die einige solcher „Mängel“ ausgleichen kann (auch bei vb- und WorksheetFunctions und zT in Analo­gie zum FmlText-Interpreter) und damit deren Anwendungsbreite vergrößert (nur das PrimärDeklarationsProblem As Range dürfte sich derartigen Versuchen hartnäckig widersetzen!). Fürchte nur, dass ich sie doch schon etwas überladen habe…
Da ich instinktiv befürchtete, dass meine AW länger ausfallen könnte und ich in letzter Zeit von anderen Problemen gefordert wurde, hat es mit meiner AW etwas gedauert, was ich zu entschuldigen bitte… ;-]
Deine guten Wünsche habe ich im nächsten Jahr besonders nötig, weshalb ich sie Dir gern ebenso zuordne - FroWeihn und alles Gute im Neuen, aber zuvor noch ein schönes Adv4-WE (auch, falls es bei Dir ebenfalls regnen sollte), Luc :-?
Anzeige
AW: zu 1. Zahl aus belieb. Text extrahieren ...
18.12.2018 08:49:33
neopa
Hallo Domi,
... eine weitere Alternative zu den bisherig angeführten, wäre als "reine" Formellösung (ohne UDF), nachfolgend angeführte, die auch keines spez. Formelabschluss wie eine klassische Matrixformel und auch weniger Funktionen benötigt.
=VERWEIS(9^9;0+TEIL(WECHSELN(A1;".";",");AGGREGAT(15;6;TEIL(A1;SPALTE(1:1);1)^0*SPALTE(1:1);1);ZEILE(A$1:A$15)))
Wobei die Teilformel WECHSELN(A1;".";",") nur in Deinem spez. Fall benötigt wird, wenn als Dezimaltrennzeichen in Deinem System das Komma eingestellt ist. Anderenfalls ist anstelle dessen lediglich A1 ausreichend.
Gruß Werner
.. , - ...
Anzeige
Wenn es um Stringmanipulation...
18.12.2018 08:52:51
Case
Hallo, :-)
... geht, dann bieten sich die Regulären Ausdrücke an: ;-)
Die UDF kannst Du dann im Tabellenblatt, oder in deiner Sub verwenden.
Beispieldatei...
Das "Pattern" kannst Du auch kürzer schreiben. Testen kannst Du das hier: ;-)
Regular...
Mit...
fncNumberP = objEx(0).Value
... würdest Du es mit Punkt statt Komma ausgeben.
Servus
Case

Anzeige
AW: Zahl aus Text extrahieren
18.12.2018 10:30:27
Daniel
Hi
die erste Zahl aus einem Text bekommst du auch mit diesem kurzen Code:
Function ErsteZahlAusText(TXT As String) As Double
Dim i As Long
For i = 1 To Len(TXT)
If Mid(TXT, i, 1) Like "#" Then
ErsteZahlAusText = Val(Mid(TXT, i))
Exit Function
End If
Next
End Function
bei Verwendung der VAL-Funktion brauchst du nur die Startposition der Zahl ermitteln, dh die erste Ziffer im Text, um das Ende kümmert sich VAL.
VAL verwendet den Punkt als Dezimaltrenner, aber der ist bei dir ja schon im Text gegeben.
Gruß Daniel
Anzeige
AW: Zahl aus Text extrahieren
19.12.2018 18:59:46
Domi
Hallo Daniel,
Die Funktion funktioniert perfekt. Bisher gabs keine Probleme.
Vielen lieben Dank :)
(Also kannst du die andere Antwort von mir ignorieren. Ich nehme diesen Code hier einfach)
Gruß Domi
Wer keine Ahnung von VBA hat, sollte möglichst …
20.12.2018 00:14:20
VBA
…universelle Fertiglösungen bevorzugen, Domi,
damit er nicht bei nächster Gelegenheit wieder nachfragen muss und sich so allmählich, statt einer Sammlung weniger Hilfsmittel, irra­tional eine von lauter ähnlichen EinzelfallLösungen aufbaut. Aber das kannst du wohl kaum erkennen, wenn du diesbzgl BTe voll­stän­dig ignorierst… :->
Luc :-?
Anzeige
AW: Wer keine Ahnung von VBA hat, sollte möglichst …
20.12.2018 08:51:13
VBA
wobei sich dann noch folgende Fragen stellen:
- was bedeutet "universell"?
- woran erkennt man "universelle Lösungen" und wie kann man sie von anderen lösungen unterscheiden?
- wie findet man diese im Internet?
Gruß Daniel
Im Internet wird man selten fündig, oft …
22.12.2018 02:25:35
Luc:-?
…nicht mal auf ausgesprochenen Xl-WebSites, mitunter aber bei MVPs und vglbaren Koryphäen oder abundzu auch in Foren(-Archiven).
Kriterien muss man sich durch Vgle erarbeiten, auch durch solche mit originären Xl-Fktt.
Luc :-?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zahl aus Text extrahieren in Excel


Schritt-für-Schritt-Anleitung

  1. VBA-Funktion erstellen: Um eine Zahl aus einem Textstring zu extrahieren, kannst du eine benutzerdefinierte Funktion (UDF) in VBA verwenden. Öffne das VBA-Editorfenster mit ALT + F11 und füge den folgenden Code ein:

    Function ZahlAusText(TXT As String) As Double
       Dim i As Long
       For i = 1 To Len(TXT)
           If Mid(TXT, i, 1) Like "#" Then
               ZahlAusText = Val(Mid(TXT, i))
               Exit Function
           End If
       Next
    End Function
  2. Funktion verwenden: Gehe zurück zu deinem Excel-Arbeitsblatt und verwende die Funktion in einer Zelle, z.B. =ZahlAusText(A1), wobei A1 die Zelle mit deinem Textstring ist.

  3. Nachkommastellen berücksichtigen: Wenn du Nachkommastellen extrahieren möchtest, stelle sicher, dass die Werte im String korrekt formatiert sind (z. B. mit einem Punkt als Dezimaltrennzeichen).


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 5: Dies kann passieren, wenn das Textfeld, aus dem du die Zahl extrahieren möchtest, leer ist oder keine gültigen Zahlen enthält. Stelle sicher, dass der Text gültige Zahlen enthält.

  • Fehler: Keine Zahl gefunden: Wenn die Funktion 0 zurückgibt, könnte es daran liegen, dass der Text nicht im erwarteten Format vorliegt. Überprüfe, ob die Zahlen im String korrekt formatiert sind.

  • Nachkommastellen werden nicht erfasst: Achte darauf, dass du den Punkt als Dezimaltrennzeichen verwendest. In einigen Excel-Installationen wird das Komma verwendet, was zu Problemen führen kann.


Alternative Methoden

  1. Excel-Formel: Du kannst auch eine Formel verwenden, um Zahlen zu extrahieren. Eine einfache Möglichkeit ist:

    =VERWEIS(9^9;0+TEIL(WECHSELN(A1;".";",");AGGREGAT(15;6;TEIL(A1;SPALTE(1:1);1)^0*SPALTE(1:1);1);ZEILE(A$1:A$15)))

    Diese Formel funktioniert, indem sie den Text bearbeitet und nach Zahlen sucht.

  2. Reguläre Ausdrücke: Wenn du mit komplexeren Texten arbeitest, könnte eine UDF, die auf regulären Ausdrücken basiert, eine bessere Lösung sein. Diese Methode erfordert jedoch mehr Programmierkenntnisse.


Praktische Beispiele

  • Beispiel 1: Für den Text asdad123)sdds2112xsd()1223121 gibt die Funktion ZahlAusText 123 zurück.

  • Beispiel 2: Im String EuS 121.12 (SAkjf), F19 3434, sdjsk wird durch die Formel 121.12 extrahiert.

  • Beispiel 3: Der Text EUNSOE 532.34, fsdfsj3412 fd3 ergibt den Wert 532.34.


Tipps für Profis

  • Verwende VBA für komplexe Extraktionen: Wenn du häufig Zahlen aus unterschiedlichen Textformaten extrahieren musst, ist es vorteilhaft, eine robuste VBA-Lösung zu implementieren.

  • Variiere die Bedingungen: Mit der Like-Anweisung kannst du Bedingungen anpassen, um z.B. nur Zahlen mit Nachkommastellen zu erkennen.

  • Fehlerbehandlung einbauen: Implementiere in deinem VBA-Code eine Fehlerbehandlung, um unerwartete Eingaben zu verarbeiten.


FAQ: Häufige Fragen

1. Wie kann ich die erste Zahl aus einem Text extrahieren?
Verwende die Funktion ZahlAusText, um die erste Zahl aus einem gegebenen Textstring zu extrahieren.

2. Was tun, wenn die Funktion keine Zahl zurückgibt?
Überprüfe den Text auf gültige Zahlenformate und stelle sicher, dass die Zelle nicht leer ist.

3. Kann ich auch mehrere Zahlen aus einem Text extrahieren?
Die vorgestellte Methode extrahiert nur die erste gefundene Zahl. Für mehrere Zahlen benötigst du eine erweiterte Funktion oder mehrere Aufrufe.

4. Wie gehe ich mit verschiedenen Dezimaltrennzeichen um?
Achte darauf, dass in deinem Excel die richtigen Einstellungen für Dezimaltrennzeichen gewählt sind, um Missverständnisse zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige