Hallo Tester96,
wenn es um Geschwindigkeit geht, dann kann man bei der Funktion natürlich einiges weglassen:
Public Function testeString(ByRef s As String) As Boolean
' testet s auf Gültigkeit:
' der String muss die Länge 9 haben
' der String darf ausschließlich die Buchstaben [1234567x] beinhalten
' aufeinanderfolgende Ziffern müssen aufsteigend sein
' es müssen alle Ziffern von 1 bis 7 vorhanden sein
' jede Ziffer darf nur 1 mal vorkommen, x kommt 2 mal vor
Dim i As Long, letzteZiffer As Long
Dim schar As String, lchar As Long, countx As Long
Dim ZifferVorhanden(1 To 7) As Boolean
testeString = False
If Not Len(s) = 9 Then Exit Function ' Länge stimmt nicht
For i = 1 To 9
schar = Mid(s, i, 1)
If schar = "x" Then
letzteZiffer = 0
countx = countx + 1
ElseIf InStr("1234567", schar) Then
lchar = CLng(schar)
If lchar < letzteZiffer Then Exit Function ' Ziffer kleiner als vorherige
letzteZiffer = lchar
If ZifferVorhanden(lchar) Then Exit Function ' Jede Ziffer nur 1 mal
ZifferVorhanden(lchar) = True
Else
Exit Function
End If
Next
If Not countx = 2 Then Exit Function ' x muss 2 mal vorkommen
testeString = True
End Function
Auf meinem Laptop brauchen damit 1.000.000 Aufrufe im Schnitt ca. 3,8 sec (für diesen Speed-Test wurden 100.000 Aufrufe mit 10 verschiedenen Strings benutzt, die Hälfte der Strings war gültig).
Puh, deine Logik hier
y = y - (Len(Replace(Zahl, x, "", 1)) = 6)
verstehe ich nicht ganz - das ist mir zu hoch :-)
Grüße, Ulrich
|