Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1660to1664
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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/

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
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
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
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
Anzeige
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 :-?
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 :-?

329 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige