Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1196to1200
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
Inhaltsverzeichnis

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

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
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

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige