von Stephan » Fr, 28.07.2017 18:21
So wäre es toll, wenn ich per Makro einen (langen) String daraufhin überprüfen könnte, ob er einen Datumsstring wie z.B. "[0-9]{2}\.[0-9]{2}\.[0-9]{4}" enthält - und wenn ja, an welcher Stelle dieser steht.
Dieser Suchbegriff sucht, meines Erachtens, keinem Datumsstring, sondern lediglich einen String der ähnlich aufgebaut ist (denn z.B. 99.45.1234 ist ein zulässiges Ergebnis, aber kein Datum), gleichzeitig ist die Suche nach diesem Suchbegriff doch durch einfache Stringzerlegung umzusetzen, beispielsweise:
Code: Alles auswählen
Sub String_pruefen()
'der String:
txt = "BlaBla12.97.1998BlaBubb12.12.1903abcxyz"
laenge = LEN(txt)
For i = 10 to laenge
k = 0
tmp1 = left(txt, i)
tmp2 = Right(tmp1, 10)
tmp3 = Split(tmp2,".")
tmp4 = JOIN(tmp3,"")
If UBOUND(tmp3()) = 2 Then
If LEN(tmp3(0)) = 2 AND LEN(tmp3(1)) = 2 AND LEN(tmp3(2)) = 4 Then
For j = 1 to LEN(tmp4)
ts = Left(tmp4,j)
Select Case ASC(Right(ts,1))
Case 48 to 59
k = k + 1
End Select
Next j
If k = 8 Then Msgbox "Datum beginnt an Position " & i-9
End If
End If
Next i
End Sub
(wahrscheinlich geht das noch besser, ich habe vorstehenden Code nur aus dem Kopf hingeschrieben)
Gruß
Stephan
[quote]So wäre es toll, wenn ich per Makro einen (langen) String daraufhin überprüfen könnte, ob er einen Datumsstring wie z.B. "[0-9]{2}\.[0-9]{2}\.[0-9]{4}" enthält - und wenn ja, an welcher Stelle dieser steht.
[/quote]
Dieser Suchbegriff sucht, meines Erachtens, keinem Datumsstring, sondern lediglich einen String der ähnlich aufgebaut ist (denn z.B. 99.45.1234 ist ein zulässiges Ergebnis, aber kein Datum), gleichzeitig ist die Suche nach diesem Suchbegriff doch durch einfache Stringzerlegung umzusetzen, beispielsweise:
[code]Sub String_pruefen()
'der String:
txt = "BlaBla12.97.1998BlaBubb12.12.1903abcxyz"
laenge = LEN(txt)
For i = 10 to laenge
k = 0
tmp1 = left(txt, i)
tmp2 = Right(tmp1, 10)
tmp3 = Split(tmp2,".")
tmp4 = JOIN(tmp3,"")
If UBOUND(tmp3()) = 2 Then
If LEN(tmp3(0)) = 2 AND LEN(tmp3(1)) = 2 AND LEN(tmp3(2)) = 4 Then
For j = 1 to LEN(tmp4)
ts = Left(tmp4,j)
Select Case ASC(Right(ts,1))
Case 48 to 59
k = k + 1
End Select
Next j
If k = 8 Then Msgbox "Datum beginnt an Position " & i-9
End If
End If
Next i
End Sub
[/code]
(wahrscheinlich geht das noch besser, ich habe vorstehenden Code nur aus dem Kopf hingeschrieben)
Gruß
Stephan