Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Suchtext extrahieren aus String (Regexp?)

Forumthread: Suchtext extrahieren aus String (Regexp?)

Suchtext extrahieren aus String (Regexp?)
MikeS
Hallo,
ich habe eine Zellen mit Meldungstexten und möchte aus diesen Texten Strings die einem bestimmten Suchmuster entsprechen auslesen (s.angehängte Beispielmappe).
Userbild
Ich benötige also die Texte zwischen "<INFO-CUSTOMER>" und "</INFO" , wenn ein Eintrag "RFC_Mobile (RFC_MOBILE)" vorhanden ist und das Datum davor.
https://www.herber.de/bbs/user/73467.xlsx
Hoffentlich habe ich mich verständlich ausgedrückt...
Vielen Dank, Mike
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Texte extrahieren - leider noch ohne RegExp
09.02.2011 19:33:43
Erich
Hallo Mike,
im Betreff stehts ja schon - hier mal ein Ansatz ohne RegExp (da müsste einer dran, der's kann...).
Deshalb habe ich auf "offen" gestellt Sub myFind() Dim tt As String, pD As Long, p1 As Long, p2 As Long Dim nn As Long tt = Cells(2, 1) nn = 1 Do pD = InStr(tt, "RFC_Mobile (RFC_MOBILE)") If pD = 0 Then Exit Do nn = nn + 1 Cells(nn, 2) = 1 * Mid(tt, pD - 20, 10) ' Datum p1 = InStr(pD + 23, tt, "") If pD = 0 Then Exit Do p1 = p1 + 15 ' Erg-Text ab p2 = InStr(p1 + 15, tt, "</INFO") ' Erg-Text bis If p2 = 0 Then Exit Do Cells(nn, 2) = Mid(tt, p1, p2 - p1) ' Erg-Text tt = Mid(tt, p2 + 5, 9 ^ 9) Loop End Sub Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Texte extrahieren - war ein Teil verschluckt
09.02.2011 19:36:43
Erich
Hallo Mike,
im Betreff stehts ja schon - hier mal ein Ansatz ohne RegExp (da müsste einer dran, der's kann...).
Deshalb habe ich auf "offen" gestellt

Sub myFind()
Dim tt As String, pD As Long, p1 As Long, p2 As Long
Dim nn As Long
tt = Cells(2, 1)
nn = 1
Do
pD = InStr(tt, "RFC_Mobile (RFC_MOBILE)")
If pD = 0 Then Exit Do
nn = nn + 1
Cells(nn, 2) = 1 * Mid(tt, pD - 20, 10)   ' Datum
p1 = InStr(pD + 23, tt, "<INFO-CUSTOMER>")")
If pD = 0 Then Exit Do
p1 = p1 + 15                              ' Erg-Text ab
p2 = InStr(p1 + 15, tt, "</INFO")         ' Erg-Text bis
If p2 = 0 Then Exit Do
Cells(nn, 2) = Mid(tt, p1, p2 - p1)       ' Erg-Text
tt = Mid(tt, p2 + 5, 9 ^ 9)
Loop
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Regex
09.02.2011 20:26:10
ransi
Hallo
Ich kratze bei der Regenechse auch noch an der Öberfläche.
Dsas geht mit Sicherheit auch einfacher, hab aber grade keine Vision...
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Function Extract_datum(zelle, intI As Integer)
    Dim Regex As Object
    Dim M As Object
    Dim strTmp As String
    strTmp = zelle.Text
    Set Regex = CreateObject("vbScript.Regexp")
    With Regex
        .Pattern = "\d{2}.\d{2}.\d{4} \d{2}:\d{2}:\d{2} RFC_Mobile \(RFC_MOBILE\).+?<INFO-CUSTOMER>.+?</INFO"
        .Global = True
        Set M = .Execute(strTmp)
        If M.Count > 0 Then
            Extract_datum = Split(M(intI - 1), " ")(0)
        End If
    End With
End Function




Public Function Extract_TestText(zelle, intI As Integer)
    Dim Regex As Object
    Dim M As Object
    Dim strTmp As String
    strTmp = zelle.Text
    Set Regex = CreateObject("vbScript.Regexp")
    With Regex
        .Pattern = "\d{2}.\d{2}.\d{4} \d{2}:\d{2}:\d{2} RFC_Mobile \(RFC_MOBILE\).+?<INFO-CUSTOMER>.+?</INFO"
        .Global = True
        Set M = .Execute(strTmp)
        If M.Count > 0 Then
            .Pattern = "<INFO-CUSTOMER>.+(?=</INFO)"
            Set M = .Execute(M(intI - 1))
            Extract_TestText = Split(M(0), "<INFO-CUSTOMER>")(1)
        End If
    End With
End Function


Tabelle1

 ABCD
2* 13.09.2010 08:41:25 M.Test Tel. 0123-456 789/* Prio1 und 2 Ausfall, Quittierung nicht möglich, T. unbekannt,/spätere korektur, WS nicht möglich/* Hr. Tester 01234-56789/* 13.09.2010 09:15:28 A.Tester (Tester) Tel. 01456-2345678-500/* Hr. Testfrau:/* T.komplett ausgefallen, Temp. steigend., TK-V-gesamt/C/* 14.09.2010 07:03:38 RFC_Mobile (RFC_MOBILE)/* <OFFER></OFFER>/* <INFO-INTERN>Information für Innendienst</INFO-INTERN>/* <INFO-CUSTOMER>Das ist der 1.Testtext.</INFO/* <SERIALNO>12345 /123/789</SERIALNO>/C/* 16.11.2010 06:59:58 RFC_Mobile (RFC_MOBILE)/* <OFFER></OFFER>/* <INFO-INTERN>Information für Innendienst/* Auftrag nicht abgeschlossen./* Falschlieferung des Steckers.</INFO-INTERN>/* <INFO-CUSTOMER>Das ist der 2.Testtext.</INFO-CUSTOMER>/* <SERIALNO>123456</SERIALNO>/C/* 11.01.2011 15:53:07 RFC_Mobile (RFC_MOBILE)/* <OFFER></OFFER>/* <INFO-INTERN>Information für Innendienst </INFO-INTERN>/* <INFO-CUSTOMER>Das ist der 3.Testtext.</INFO-CUSTOMER>/* <SERIALNO-SELECT>1</SERIALNO-SELECT> 14.09.2010Das ist der 1.Testtext.
3 16.11.2010Das ist der 2.Testtext.
4 11.01.2011Das ist der 3.Testtext.
5  #WERT!#WERT!

Formeln der Tabelle
ZelleFormel
C2=extract_datum($A$2;ZEILE(A1))
D2=extract_testtext($A$2;ZEILE(A1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Das Datum wird nicht auf Gültigkeit geprüft.
Aber teste mal selber.
Vieleicht fällt dir sonstnoch was auf.
ransi
Anzeige
kleine Korrektur
09.02.2011 21:37:11
Erich
Hi,
in meinem Trocken-VBA-Code war noch ein Fehler:
If pD = 0 Then Exit Do kommt zweimal vor. Beim zweiten Mal sollte da besser stehen:
If p1 = 0 Then Exit Do
(Das war natürlich nicht ich - das war der Kopierteufel...)
@Ransi:
Wenn du weiter so an der Öberfläche kratzt, kommt die Regenechse noch mal ganz groß raus! -:)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Merci :-)
09.02.2011 21:59:13
MikeS
Hallo Ihr 2,
vielen Dank für die Lösungen. Ich verwende nun die nachfolgende, die ich noch etwas angepasst habe (s.Info von Erich).
<pre>Sub myFind()
Dim tt As String, pD As Long, p1 As Long, p2 As Long
Dim nn As Long
tt = Cells(2, 1)
nn = 1
Do
pD = InStr(tt, "RFC_Mobile (RFC_MOBILE)")
If pD = 0 Then Exit Do
nn = nn + 1
Cells(nn, 2) = CDate(Mid(tt, pD - 20, 10)) ' Datum
p1 = InStr(pD + 23, tt, "<INFO-CUSTOMER>")
If p1 = 0 Then Exit Do
p1 = p1 + 15 ' Erg-Text ab
p2 = InStr(p1 + 15, tt, "</INFO") ' Erg-Text bis
If p2 = 0 Then Exit Do
Cells(nn, 3) = Mid(tt, p1, p2 - p1) ' Erg-Text
tt = Mid(tt, p2 + 5, 9 ^ 9)
Loop
End Sub</pre>
Einen schönen Abend und Grüsse aus Köln.
Mike
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Suchtext aus einem String in Excel extrahieren


Schritt-für-Schritt-Anleitung

Um aus einem String in Excel einen bestimmten Suchtext mithilfe von VBA zu extrahieren, kannst du folgende Schritte befolgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke im Menü auf Einfügen und wähle Modul.

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Sub myFind()
        Dim tt As String, pD As Long, p1 As Long, p2 As Long
        Dim nn As Long
        tt = Cells(2, 1)
        nn = 1
        Do
            pD = InStr(tt, "RFC_Mobile (RFC_MOBILE)")
            If pD = 0 Then Exit Do
            nn = nn + 1
            Cells(nn, 2) = CDate(Mid(tt, pD - 20, 10)) ' Datum
            p1 = InStr(pD + 23, tt, "<INFO-CUSTOMER>")
            If p1 = 0 Then Exit Do
            p1 = p1 + 15
            p2 = InStr(p1 + 15, tt, "</INFO>")
            If p2 = 0 Then Exit Do
            Cells(nn, 3) = Mid(tt, p1, p2 - p1) ' Erg-Text
            tt = Mid(tt, p2 + 5, 9 ^ 9)
        Loop
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

  5. Ergebnisse prüfen: Die extrahierten Daten erscheinen in den entsprechenden Zellen.


Häufige Fehler und Lösungen

  • Fehler: Typenübereinstimmung: Stelle sicher, dass die Zelle, auf die du zugreifst, Text enthält. Wenn die Zelle leer ist, kann dies zu Fehlern führen.
  • Fehler: Falsche Zellreferenz: Überprüfe die Zellreferenzen, um sicherzustellen, dass sie den Daten in deinem Arbeitsblatt entsprechen.
  • Fehler: Unzureichende Daten: Wenn der Suchtext nicht gefunden wird, kann das Makro nicht weiterarbeiten. Stelle sicher, dass der Suchtext im angegebenen Zellbereich vorhanden ist.

Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch die TEXT-Funktionen in Excel nutzen. Zum Beispiel:

  • Teilen mit TEIL: Verwende die TEIL-Funktion, um spezifische Teile eines Strings zu extrahieren.

    =TEIL(A1;SUCHEN("<INFO-CUSTOMER>";A1)+15;SUCHEN("</INFO>";A1)-SUCHEN("<INFO-CUSTOMER>";A1)-15)
  • Verwenden von FINDEN und REPLACE: Mit der Kombination dieser Funktionen kannst du ebenfalls gezielt Informationen extrahieren.


Praktische Beispiele

Hier sind einige Beispiele, wie du die erwähnten Methoden in der Praxis anwenden kannst:

  1. Beispiel für VBA: Wenn du einen String in Zelle A2 hast, der den Text enthält:

    13.09.2010 08:41:25 RFC_Mobile (RFC_MOBILE) <INFO-CUSTOMER>Das ist der 1.Testtext.</INFO>

    wird das Makro den Text Das ist der 1.Testtext. extrahieren und in die Zelle B2 einfügen.

  2. Beispiel für Excel-Formeln: Verwende die oben genannte TEIL-Funktion, um direkt in der Excel-Oberfläche zu arbeiten, ohne auf VBA zurückgreifen zu müssen.


Tipps für Profis

  • Regex in Excel: Wenn du dich mit regex excel auskennst, kannst du diese Methode zur Textbearbeitung verwenden. Nutze VBA-Regex, um komplexere Muster zu erfassen.
  • RegexReplace in Excel: Mit regexreplace excel kannst du Textmuster finden und ersetzen, was dir hilft, nur die relevanten Daten zu extrahieren.
  • Regelmäßige Überprüfung: Führe regelmäßige Tests durch, um sicherzustellen, dass dein Makro auch bei Änderungen im Datenformat funktioniert.

FAQ: Häufige Fragen

1. Kann ich Regex in Excel ohne VBA verwenden?
Nein, Excel unterstützt keine nativen Regex-Funktionen. Du kannst jedoch VBA verwenden, um Regex-Operationen durchzuführen.

2. Wie kann ich die extrahierten Daten weiterverarbeiten?
Nach der Extraktion kannst du die Daten in Excel wie gewohnt analysieren, filtern oder weiterverarbeiten.

3. Ist es möglich, mehrere Suchmuster gleichzeitig zu extrahieren?
Ja, du kannst das VBA-Skript anpassen, um mehrere Muster zu erkennen und zu extrahieren. Achte darauf, die Logik entsprechend zu erweitern.

4. Welche Excel-Version benötige ich für die VBA-Methoden?
Die beschriebenen VBA-Methoden sind in Excel 2010 und neueren Versionen verfügbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige