Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zahl aus String auslesen

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
Anzeige

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
Anzeige
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
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!
Anzeige
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
Anzeige
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
Anzeige
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
Anzeige
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
;

Forumthreads zu verwandten Themen

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 String auslesen in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um eine Zahl aus einem String in Excel mit VBA zu extrahieren, kannst du die folgende Funktion verwenden. Diese Funktion sucht nach 6- oder 7-stelligen Zahlen und ignoriert Leerzeichen sowie andere Trennzeichen:

Function getZahl(ByVal myStr As String) As String
    Dim regEx As Object
    Dim Matches As Object
    Dim strTmp As String

    Set regEx = CreateObject("Vbscript.RegExp")
    With regEx
        .Global = True
        .Pattern = "(\d{6,7}|\d{3,4} +\d{3,4})(?=(\D|$))" 'Regex für 6- oder 7-stellige Zahlen
        If .test(myStr) = True Then
            Set Matches = .Execute(myStr)
            getZahl = Matches(0).Value
        End If
    End With
End Function
  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu (Einfügen > Modul).
  3. Kopiere den obigen Code in das Modul.
  4. Schließe den VBA-Editor und gehe zurück zu Excel.
  5. Verwende die Funktion in einer Zelle, z.B. =getZahl(A1).

Häufige Fehler und Lösungen

  • Problem: Zahlen am Anfang des Strings werden nicht erkannt.

    • Lösung: Füge ein Leerzeichen vor dem String hinzu: myStr = " " & myStr.
  • Problem: Zahlen mit Kommas oder Punkten werden nicht korrekt erkannt.

    • Lösung: Stelle sicher, dass das Regex-Muster Leerzeichen ignoriert.
  • Problem: Mehrere 6- oder 7-stellige Zahlen werden nicht alle ausgegeben.

    • Lösung: Überarbeite das Regex-Muster, um alle gewünschten Zahlen zu erfassen.

Alternative Methoden

Falls du nicht VBA verwenden möchtest, kannst du auch folgende Alternativen in Betracht ziehen:

  1. Textfunktionen in Excel: Verwende TEXTKETTE oder LINKS, RECHTS und TEIL, um die gewünschte Zahl manuell zu extrahieren.
  2. Power Query: Importiere deine Daten in Power Query und verwende die Text-Funktionen von Power Query, um die Zahlen zu filtern.

Praktische Beispiele

Hier sind einige Beispiele, die zeigen, wie die Funktion funktioniert:

Text Erwartetes Ergebnis
porös M30 Gewinde 893575 893575
druck 0,7bar 623866 623866
undicht 656 698 656698
7.703.493: 665571 test S/N: 15.0061: keine Funktion. 665571
das teil 123456 asd987654 enthalten 123456

Verwende die Funktion in der Zelle, um das Ergebnis zu bekommen.


Tipps für Profis

  • Regex Leerzeichen ignorieren: Achte darauf, dass dein Regex-Muster so konfiguriert ist, dass es Leerzeichen zwischen den Zahlen ignoriert.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deiner Funktion, um unerwartete Eingaben abzufangen.
  • Testen: Teste deine Funktion mit verschiedenen Beispielen, um sicherzustellen, dass sie unter verschiedenen Bedingungen funktioniert.

FAQ: Häufige Fragen

1. Was ist Regex und wie funktioniert es? Regex (Regular Expressions) ist eine leistungsstarke Methode zur Verarbeitung von Textmustern. Es ermöglicht dir, spezifische Muster zu definieren, nach denen im Text gesucht werden soll.

2. Wie kann ich die Funktion anpassen, um auch 5-stellige Zahlen zu extrahieren? Ändere das Regex-Muster in der Funktion zu (\d{5,7}|\d{3,4} +\d{3,4}), um 5-stellige Zahlen einzuschließen.

3. Wo kann ich mehr über Regex lernen? Es gibt viele Ressourcen online, darunter Tutorials und Foren, wie das phpwcms Forum, die dir helfen können, Regex besser zu verstehen und anzuwenden.

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