KFZ Kennezichen überprüfung - VBA kürzester Code

  • Excel

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Eistee.

    KFZ Kennezichen überprüfung - VBA kürzester Code

    Hallo,

    ich hätte da eine Aufgabe wobei ich auch der suche nach der kürzesten/kleinsten Lösung bin.
    Es muss per inputbox eine Kennzeichen eingegeben werden, dieses muss auf seine Gültigkeit überprüft werden.

    Von @-@ 1 bis @@@-@@@ 1234
    @ = Großbuchstabe

    • 1 bis 3 Großbuchstaben
    • Bindestrich -
    • 1 bis 3 Großbuchstaben
    • "Leerzeichen"
    • 1 bis 4 Zahlen


    Es geht mir um den Kleinsten Code für die Überprüfung.
    Wer möchte kann sich dran versuchen und das Ergebnis hier posten.

    Minimum bis jetzt bei 84 Zeilen (nicht mein Code)
    Das ganze sollte aber auch nicht so aussehen, das man alles in eine Zeile schreibt...

    Gruß Eistee

    PS: Excel Version ist 2003 (keine Ahnung ob sich da nach 2010 etwas geändert hat)
    Edit: Peinlich falsches Unterforum :cursing:

    Edit by der_Kurt:
    Keine Panik
    * Thema verschoben: Off-Topic -> VBA *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    das dürfte sich zustäzlich schwierig gestalten, da du nach dem ermitteln einer neuen kombination sie anschließend noch auf ihre verwendbarkeit prüfen musst, denn in dtl haben wir immernoch mit der "vergangenheitsbewältigung" zu tun.

    dabei reicht es nicht kombinationen mit "HH" oder "AH" und irgendwelchen 88- oder 18-nummern zu blockieren da es, wie du diesem thread ( telefon-treff.de/showthread/t-19841.html ) entnehmen kannst von landkreis zu landkreis unterschiedlich gehandhabt wird.

    bei uns in potsdam-mittelmark, sind beispielsweise alle diese kombinationen strickt verboten (schade wenn man sich mit 18 sein erstes auto zulegt... jetzt fahren meine mitschüler mit 1337 rum :D )

    FuFu^^ schrieb:

    jetzt fahren meine mitschüler mit 1337 rum :D )


    Wie geil ist das denn :D!!!

    Ne außnahmen etc. sind egal!
    Es ist nur wichtig was ich geschrieben habe.

    Von @-@ 1 bis @@@-@@@ 1234

    Ich such mal schnell nach RegEx.
    RegEx sollte in Excel 2003 funktionieren (sprach google).

    Wie würden die 3 zeilen lauten?
    Habe noch nie etwas mit RegEx gemacht und habe nur noch wenig Zeit ^^
    Versuche es mal auf die schnelle, würde mich aber trotzdem über Code freuen.
    Also wenn man es mit VBA ohne RegEx macht würde ich es so machen:

    Visual Basic-Quellcode

    1. - In einer Schleife
    2. - Position vom Bindestrich herrausfinden und Speichern
    3. - Position vom Leerzeichen herrausfinden und Speichern
    4. - Mit einer Schleife vom anfang bis zur Position des Bindestriches, mit einem Select Case auf Großbuchstaben überprüfen *zudem* Wenn schleifenzähler > wie 3 Kennzeichen ist Falsch; wenn = 0 auch Fehler
    5. - Mit einer Schleife von der Bindestrich Position + 1 bis zu Leerzeichen Position - 1 auf Großbuchstaben überprüfen *zudem* Wenn schleifenzähler > wie 3 Kennzeichen ist Falsch; wenn = 0 auch Fehler
    6. - Mit einer Schleife von der Position vom Leerzeichen + 1 zur Länge der Eingabe auf Zahlen überprüfen *zudem* Wenn schleifenzähler > wie 4 Kennzeichen ist Falsch; wenn = 0 auch Fehler


    4 Schleifen/Schleifenzähler
    3 * Select Case
    ca. 5 * If

    Geht das mit VBA irgendwie kürzer?
    Dreizeiler gefällig?

    Visual Basic-Quellcode

    1. Function TestNumber(ByVal Number As String) As Boolean
    2. Set objRegEx = CreateObject("vbscript.regexp")
    3. objRegEx.Pattern = "^[A-Z]{1,3}-[A-Z]{1,3} [1-9][0-9]{0,3}$"
    4. TestNumber = objRegEx.Test(Number)
    5. End Function
    gibt TRUE zurück, wenn es eine (nach deinen Kriterien) gültige Autonummer ist.

    Edit:
    Meines Wissens gibt es kein Kennzeichen mit 3 Buchstaben nach dem Bindestrich.
    Das richtige Pattern wäre dann "^[A-Z]{1,3}-[A-Z]{1,2} [1-9][0-9]{0,3}$"
    Ausserdem ist in der realen Welt der Bindestrich seit einigen Jahren auch nicht mehr vorhanden, sondern müsste durch ein Leerzeichen ersetzt werden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „petaod“ ()

    Danke erstmal an alle :)

    Leider habe ich heute morgen verpennt und war ca. 30 Minuten zu spät zur Klausur aufgetaucht.
    Naja konnte mir das mit RegEx deswegen leider nicht mehr anschauen, musste jetzt im vergleich zu RegeEx meinen ultra langen VBA Code runtertippen.

    Naja war nach ca. 15 mit Aufgabe 1 & 2 Fertig, dann noch 15 Minuten für eine Access Datenbank und konnte nach einer guten halben Stunde wieder gehen ^^
    Hatte am ende noch über 100 Minuten Zeit, aber es wäre mit RegEx natürlich noch schneller gewesen, aber egal jetzt is eh zu spät :P