Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
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 String auslesen
05.04.2017 11:12:57
cH_rI_sI
Hallo liebe Excel-Freunde,
ich verwende u.a. Code zum Auslesen von Zahlen aus einem String:
' Liest Zahlen aus einem String heraus ' matchNr gibt an, welcher Treffer ausgelesen werden soll Function getZahl(ByVal myStr As String, Optional ByVal matchNr As Integer = 1) Dim regEx As Object Dim Matches As Object ' * die gefundene Zahl muss mind. 3-stellig sein
* Wenn eine Zahl im String gefunden wurde, dann hört die Suche auf -> hier wäre schön, wenn weitergesucht und die Zahlen dann verbunden werden (ohne Leerzeichen) - z.B.: "Ring fehlt 922 293" -> wird nur 922 gefunden -> soll 922293 sein
Wäre echt nett von Euch, wenn jemand den bestehenden Code diesbezüglich anpassen könnte - besten Dank schonmal!
Glg,
Chrisi

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahl aus String auslesen
05.04.2017 11:39:48
cH_rI_sI
Was ich vergessen habe...
Wenn eine Zahl durch ein Komma oder einem Punkt getrennt ist, dann ebenfalls ignorieren - z.B.:
7.703.493 oder 12,000 usw. - d.h. mind. 3-stellige Zahlen die verbunden werden sollen, müssen vorne und hinten ein Leerzeichen haben...
AW: Zahl aus String auslesen
05.04.2017 12:06:26
ransi
HAllo,
Gib uns doch bitte mal einige Beispiele.
Am besten in einer kleinen TAbelle.
In Spalte A die Texte, in Spalte B die gewünschten Ergebnisse.
ransi
AW: Zahl aus String auslesen
05.04.2017 12:18:57
Fennek
Hallo,
eine recht gute Info-Quelle:
http://www.regenechsen.de/phpwcms/index.php?regex
- midestens 3 Zahlen: .pattern = "\d{3,}"
- mehrere Zahlen: .global = true
Es soll nur eine Anregung sein.
mfg
Anzeige
AW: Zahl aus String auslesen
05.04.2017 12:37:59
cH_rI_sI
Hallo,
hier bitte eine Beispieldatei mit dem angeführten Code:
https://www.herber.de/bbs/user/112658.xlsm
Und hier die Datenquelle in welcher gelesen wird:
https://www.herber.de/bbs/user/112659.xlsx
Folgendes Ergebnis würde ich erwarten:
Text                                                   Ergebnis
porös M30 Gewinde 893575                               893575
druck 0,7bar 623866                                    623866
undicht      656 698                                   656698
beschädigt    222 922                                 222922
undicht      656 698                                   656698
7.703.493: 665571 test S/N: 15.0061: keine Funktion.   665571
7.703.405: 665571 test S/N: 12.0831: Kein Signal       665571

Besten Dank im Voraus für Eure Mühe!
Lg,
Chrisi
Anzeige
AW: Zahl aus String auslesen
05.04.2017 12:50:55
ransi
Hallo,
Teste mal selber ob das schon alle Eventualitäten abdeckt.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Function getZahl(ByVal myStr As String)
    Dim regEx As Object
    Dim Matches As Object
    Dim objMatch As Object
    Dim strTmp As String
    Set regEx = CreateObject("Vbscript.Regexp")
    With regEx
        .Pattern = " \d{3,}" 'Leerzeichen & mind.3 Zahlen
        .Global = True
        If .test(myStr) = True Then
            Set Matches = .Execute(myStr)
            For Each objMatch In Matches
                strTmp = strTmp & objMatch.Value
            Next
        End If
    End With
    
    getZahl = Replace(strTmp, " ", "")
    
End Function


ransi
Anzeige
AW: Zahl aus String auslesen
05.04.2017 13:01:26
cH_rI_sI
Ransi du bist echt der Beste - läuft genauso wie ich wollte!!!
Danke nochmal!
AW: Zahl aus String auslesen
05.04.2017 14:02:54
cH_rI_sI
Hallo Ransi,
ein Problem habe ich leider noch - wenn die gesuchte Zahl ganz am Anfang steht, also ohne Leerzeichen, dann wird diese nicht gefunden:

Text                                  Erwartetes Ergebnis
667 411 Test                          667411
842476 Bundhutmutter: Trotz 100 %     842476
241935 Zyl. Schraube ISO 4762 -       241935
test 212    764 und so weiter         212764

D.h. die gesuchten Zahlen sind 6- oder 7-stellig und haben Vorrang gegenüber anderen Zahlen die vorkommen können...
Die Zahlen könnten aber auch getrennt dargestellt werden - also 3- oder 4-stellige Zahl -> mind. 1x leer -> 3- oder 4-stellige Zahl
Ich hoffe Du kennst Dich aus ;-)
Vielen Dank schonmal...
Lg,
Chrisi
Anzeige
AW: Zahl aus String auslesen
05.04.2017 14:32:14
cH_rI_sI
Hallo Ransi,
ein Problem habe ich leider noch - wenn die gesuchte Zahl ganz am Anfang steht, also ohne Leerzeichen, dann wird diese nicht gefunden:
Text                                  Erwartetes Ergebnis
667 411 Test                          667411
842476 Bundhutmutter: Trotz 100 %     842476
241935 Zyl. Schraube ISO 4762 -       241935
test 212    764 und so weiter         212764
D.h. die gesuchten Zahlen sind 6- oder 7-stellig und haben Vorrang gegenüber anderen Zahlen die vorkommen können...
Die Zahlen könnten aber auch getrennt dargestellt werden - also 3- oder 4-stellige Zahl -> mind. 1x leer -> 3- oder 4-stellige Zahl
Ich hoffe Du kennst Dich aus ;-)
Vielen Dank schonmal...
Lg,
Chrisi
Anzeige
AW: Zahl aus String auslesen
05.04.2017 14:46:57
Daniel
Hi
füge doch einfach ein Leerzeichen dem Text hinzu, bevor du mit dem RegEx loslegst:
myStr = " " & myStr
Gruß Daniel
AW: Zahl aus String auslesen
05.04.2017 15:19:36
cH_rI_sI
Hallo Daniel und auch alle anderen,
leider funktioniert das Ganze nicht wie vorgesehen - die derzeitigen Probleme sind:
 Zahlen ohne Leerzeichen davor werden nicht erkannt (wenn am Anfang des Strings -> meistens  _
sind die Zahlen jedoch irgendwo mitten im String...)
 an bereits 6- oder 7-stellige Zahlen werden noch weitere angehängt sofern vorhanden
Daher wäre es am Besten zuerst nach 6- oder 7-stelligen Zahlen zu suchen - wenn was gefunden wurde, dann ist Schluss - ansonsten weitersuchen - wenn dann 2 mehrstellige Zahlen gefunden wurden, welche nur durch ein oder mehrere Leerzeichen getrennt sind, dann sind diese zu verbinden und dann ist Schluss...
Ich weiß das Ganze wird schon komplex, aber nachdem hier im Forum die Profis zuhause sind, bitte erneut um Eure Hilfe - Danke!
Lg,
Chrisi
Anzeige
AW: Zahl aus String auslesen
05.04.2017 15:28:12
ransi
Hallo,
Versuch mal dieses pattern:

.Pattern = "(\d{6,7}|\d{3,4} +\d{3,4})"
ransi
AW: Zahl aus String auslesen
05.04.2017 16:10:13
cH_rI_sI
Hallo Ransi,
passt nun fast - bis auf:
Beim Text

"code 12,000   665161"
wird nur 6651 ausgegeben
Wenn mehrere 6- oder 7-stellige Zahlen vorhanden sind, dann bitte alle 6- oder 7-stellige Zahlen mit einem Leerzeichen getrennt ausgeben -> ist sicher jetzt blöd, weil wir ja 3- oder 4-stellige Zahlen verbinden sollen...
Ansonsten echt schon sehr, sehr gut - vielen Dank für deine Mühe!
AW: Zahl aus String auslesen
05.04.2017 17:23:05
ransi
HAllo,
Wenn mehrere 6- oder 7-stellige Zahlen vorhanden sind, dann bitte alle 6- oder 7-stellige Zahlen mit einem Leerzeichen getrennt ausgeben -> ist sicher jetzt blöd, weil wir ja 3- oder 4-stellige Zahlen verbinden sollen...
Das versteh ich nicht.
Gib doch mal ne Tabelle mit allen Möglichkeiten die vorkommen können.
Bis dahin arbeite mal mitdiesem Pattern:
.Pattern = "(\d{6,7}|\d{3,4} +\d{3,4})(?=(\D|$))"

ransi
Anzeige
AW: Zahl aus String auslesen
05.04.2017 18:33:19
cH_rI_sI
Hallo Ransi,
eine Beispieldatei kann ich Dir morgen geben - aber hier schonmal ein String den ich gemeint habe:
"das teil 123456 ist in 987654 enthalten" somit würde ich als Ergebnis "123456 987654" erwarten - also 6- bis 7-stellige Zahlen mit einem Leerzeichen getrennt...
Schönen Abend noch!
Lg
AW: Zahl aus String auslesen
05.04.2017 18:50:44
ransi
Tabelle1

 AB
1 porös M30 Gewinde 893575893575
2druck 0,7bar 623866623866
3undicht      656 698656698
4 beschädigt    222 922222922
5undicht      656 698656698
67.703.493: 665571 test S/N: 15.0061: keine Funktion.665571
77.703.405: 665571 test S/N: 12.0831: Kein Signal 665571
8code 12,000   665161665161
9A12345671234567
101234567asd1234567
11das teil 123456 asd987654 enthalten123456 987654

Formeln der Tabelle
ZelleFormel
B1=getZahl(A1)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Function getZahl(ByVal myStr As String)
    Dim regEx As Object
    Dim Matches As Object
    Dim objMatch As Object
    Dim objSubMatch
    Dim strTmp As String
    Set regEx = CreateObject("Vbscript.Regexp")
    With regEx
        .Pattern = "(\d{6,7}|\d{3,4} +\d{3,4})(?=(\D|$))"
        .Global = True
        If .test(myStr) = True Then
            Set Matches = .Execute(myStr)
            For Each objMatch In Matches
                strTmp = strTmp & objMatch
            Next
            getZahl = Replace(strTmp, " ", "")
        End If
        .Pattern = "(\d{6,7}).+(\d{6,7})"
        If .test(myStr) = True Then
            Set Matches = .Execute(myStr)
            getZahl = Matches(0).submatches(0) & " " & Matches(0).submatches(1)
        End If
    End With
End Function


Aber jetzt wart ich auf ne Beispieltabelle..
Anzeige
AW: Zahl aus String auslesen
06.04.2017 08:12:39
cH_rI_sI
Guten Morgen Ransi,
jetzt funktioniert alles perfekt - vielen Dank dafür!
Kannst Du mir das noch mit dem .Pattern erklären - ich möchte das einfach verstehen:
* In Klammer bedeutet also immer wieviele Stellen die Zahl haben soll?
* Ein Komma in der Klammer zwischen 2 Zahlen bedeutet Stellen von - bis oder?
* Was bedeutet genau \ d oder | ? Bzw. was ist mit (?=(\D|$)) gemeint?
Wo kann ich all das nachlesen?
Vielen Dank für deine Erläuterungen!
Lg,
Chrisi
AW: Zahl aus String auslesen
06.04.2017 10:04:41
cH_rI_sI
Hallo Ransi,
anbei das Beispielfile:
https://www.herber.de/bbs/user/112681.xlsx
Ich habe erst jetzt gesehen, dass 3 Szenarien noch nicht funktionieren (im File rot markiert):
7.703.404 912iS2 test: 866261 test EGT 3 gewechselt, zeigt 1030 °C an.
5   undicht      656ddd 698
5   undicht      656 ggg698

Danke im Voraus, wenn Du Dir das nochmal ansiehst...
Lg,
Chrisi
Anzeige
AW: Zahl aus String auslesen
07.04.2017 17:08:32
ransi
HAllo,
Tabelle1

 AB
17.703.404 912iS2 test: 866261 test EGT 3 gewechselt, zeigt 1030 °C an.866261
2teilungsgrat 611857611857
3Ring fehlt  922 293922293
4(Plastikspan)922293922293
5rückstand    431 640431640
6porös M30 Gewinde dfdd893575893575
72   druck 0,7bar 623866dddd623866
83   undicht      656 698656698
94   beschädigt    dddd222 922222922
105   undicht      656ddd 698656698
114   beschädigt    222 922ggggg222922
125   undicht      656 ggg698656698
136   7.703.493: 665571 test S/N: 15.0061: keine Funktion.665571
147   7.703.405: 665571 test S/N: 12.0831: Kein Signalgg665571
158   code 12,000   665161665161
169   A12345671234567
1710  1234567asd1234567
1811  das teil 123456 asd987654 enthalten123456 987654

Formeln der Tabelle
ZelleFormel
B1=getzahl(A1)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Für deine Beispieldaten passt es.
Teste mal an deinen Daten.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Function getZahl(ByVal myStr As String)
    Dim regEx As Object
    Dim Matches As Object
    Set regEx = CreateObject("Vbscript.Regexp")
    With regEx
        .Global = True
        .Pattern = "(\d{6,7}).+(\d{6,7})" '6-7 stellige Zahl & irgendwelche Zeichen & 6-7 stellige Zahl
        If .test(myStr) = True Then
            Set Matches = .Execute(myStr)
            getZahl = Matches(0).submatches(0) & " " & Matches(0).submatches(1)
            Exit Function
        End If
        
        .Pattern = "\d{6,7}(?=(\D|$))" '6-7 stellige Zahl (vor einer NichtZahl oder vor dem Ende der Eingabe)
        If .test(myStr) = True Then
            Set Matches = .Execute(myStr)
            getZahl = Matches(0).Value
            Exit Function
        End If
        
        .Pattern = "(\d{3,4}).+(\d{3,4})(?=(\D|$))" '(3-4stellige Zahl & irgendwelche Zeichen & 3-4 stellige Zahl)( vor einer NichtZahl oder vor dem Ende der Eingabe)
        If .test(myStr) = True Then
            Set Matches = .Execute(myStr)
            getZahl = Matches(0).submatches(0) & Matches(0).submatches(1)
        End If
    End With
End Function


'\d --Zahl
'\D -->Nichtzahl
'| -->oder
'$ -->Ende der Eingabe

Ich hab das jetzt auf 3 Pattern aufgeteilt.
Das macht einfacher.
ransi
AW: Zahl aus String auslesen
07.04.2017 17:36:56
cH_rI_sI
Hey Ransi,
ich bin sprachlos - läuft nun Einwandfrei!
Vielen lieben Dank und schönes WE!!!
Lg,
Chrisi
AW: Zahl aus String auslesen
07.04.2017 17:36:56
cH_rI_sI
Hey Ransi,
ich bin sprachlos - läuft nun Einwandfrei!
Vielen lieben Dank und schönes WE!!!
Lg,
Chrisi

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige