Thema Datum  Von Nutzer Rating
Antwort
22.08.2021 21:39:01 Testert96
Solved
22.08.2021 23:51:43 Mase
NotSolved
23.08.2021 08:25:55 Tester96
NotSolved
23.08.2021 11:23:22 Mase
NotSolved
24.08.2021 19:33:40 Ulrich
NotSolved
25.08.2021 08:25:07 Tester96
NotSolved
25.08.2021 09:19:56 Gast38529
NotSolved
Blau ein Vorschlag
25.08.2021 15:28:45 Ulrich
NotSolved
25.08.2021 21:38:17 Tester96
NotSolved
26.08.2021 12:23:53 Ulrich
NotSolved

Ansicht des Beitrags:
Von:
Ulrich
Datum:
25.08.2021 15:28:45
Views:
471
Rating: Antwort:
  Ja
Thema:
ein Vorschlag

Hallo Tester96,

willst du nicht auch selbst Hand anlegen?

Hier mal  eine mögliche Anpassung, dass 'x' 2 mal vorkommt und jede Ziffer nur 1 mal.

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
 
countx = 0
letzteZiffer = 0
For i = 1 To 7:   ZifferVorhanden(i) = False:   Next
For i = 1 To 9
    schar = Mid(s, i, 1)
 
    If schar = "x" Then
        letzteZiffer = 0
        countx = countx + 1
        If countx > 2 Then Exit Function                    ' x muss 2 mal vorkommen
 
    ElseIf InStr("1234567", schar) Then
        lchar = CLng(schar)
        If lchar < letzteZiffer Then Exit Function          ' Ziffer größer als vorherige
        letzteZiffer = lchar
        If ZifferVorhanden(lchar) Then Exit Function        ' Jede Ziffer nur 1 mal
        ZifferVorhanden(lchar) = True
 
    Else
        Exit Function
 
    End If
Next
 
For i = 1 To 7
    If Not ZifferVorhanden(i) Then Exit Function            ' Ziffer ist nicht vorgekommen
Next
 
testeString = True
 
End Function

 

Man kann das sicherlich verdichten, dazu bin ich aber gerade zu faul :-).

 

Hier ein Test-Makro, mit den Beispielen, die mir bisher in diesem Thread über den Weg gelaufen sind:

Sub test()
Dim richtige, falsche, aktuelles, tests_bestanden As Boolean

richtige = Array("47x2356x1", "123x57x46", "xx1234567", "567xx1234")
falsche = Array("3x1234567", "67x123457", "12345x76x")

tests_bestanden = True
For Each aktuelles In richtige
    If Not testeString((aktuelles)) Then
        Debug.Print "Sollte eigentlich wahr sein: ", aktuelles
        tests_bestanden = False
    End If
Next
For Each aktuelles In falsche
    If testeString((aktuelles)) Then
        Debug.Print "Sollte eigentlich falsch sein: ", aktuelles
        tests_bestanden = False
    End If
Next

If tests_bestanden Then
    Debug.Print "Tests erfolgreich durchlaufen"
End If

End Sub

Dorrt kannst du einfach in diesen Zeilen

richtige = Array("47x2356x1", "123x57x46", "xx1234567", "567xx1234")
falsche = Array("3x1234567", "67x123457", "12345x76x")

weitere Strings hinzufügen zum testen. Das kann beim Programmieren sehr helfen (man programmiert so lange, bis die Funktion alle tests besteht.

 

Grüße, Ulrich


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
22.08.2021 21:39:01 Testert96
Solved
22.08.2021 23:51:43 Mase
NotSolved
23.08.2021 08:25:55 Tester96
NotSolved
23.08.2021 11:23:22 Mase
NotSolved
24.08.2021 19:33:40 Ulrich
NotSolved
25.08.2021 08:25:07 Tester96
NotSolved
25.08.2021 09:19:56 Gast38529
NotSolved
Blau ein Vorschlag
25.08.2021 15:28:45 Ulrich
NotSolved
25.08.2021 21:38:17 Tester96
NotSolved
26.08.2021 12:23:53 Ulrich
NotSolved