Public Function AI(cZelle As String) As String
Select Case cZelle
Case "A"
AI = "10"
Case "B"
AI = "11"
Case "C"
AI = "12"
Case "D"
AI = "13"
Case "E"
AI = "14"
Case "F"
AI = "15"
Case "G"
AI = "16"
Case "H"
AI = "17"
Case "I"
AI = "18"
Case "J"
AI = "19"
Case "K"
AI = "20"
Case "L"
AI = "21"
Case "M"
AI = "22"
Case "N"
AI = "23"
Case "O"
AI = "24"
Case "P"
AI = "25"
Case "Q"
AI = "26"
Case "R"
AI = "27"
Case "S"
AI = "28"
Case "T"
AI = "29"
Case "U"
AI = "30"
Case "V"
AI = "31"
Case "W"
AI = "32"
Case "X"
AI = "33"
Case "Y"
AI = "34"
Case "Z"
AI = "35"
Case Else
AI = cZelle
End Select
End Function
=RECHTS((AI(TEIL(D5;1;1))*7)+(AI(TEIL(D5;2;1))*3)+(AI(TEIL(D5;3;1))*1)+(AI(TEIL(D5;4;1))*7)+(AI(TEIL(D5;5;1))*3)+(AI(TEIL(D5;6;1))*1)+(AI(TEIL(D5;7;1))*7)+(AI(TEIL(D5;8;1))*3)+(AI(TEIL(D5;9;1))*1);1)
Mit diesen Funktionen generiere ich eine Prüfziffer. Nun erscheint mir das nicht gerade elegant. Das geht doch sicher besser? Z.B. per Schleife. Nur kenne ich mich mit Schleifen nicht. aus. Den Anfang habe ich schon mal geschrieben. Die Zeichenlänge kann unterschiedlich sein (6, 7, 8, 10. Mindestlänge ist 6), daher "Optional lngLänge As Long = 6".
Public Function CreateCheckDigit(cZelle As String, Optional lngLänge As Long = 6) As String
Dim c1, c2, c3, lnGC, test
test = 645
' Zu tauschende Zeichen
c1 = Array(A, B, C, D, E, F, G, H, I, J, K, L, _
M, N, O, P, Q, R, S, T, U, V, W, X, _
Y, Z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
' Zeichen mit denen "c1" getauscht werden soll
c2 = Array(10, 11, 12, 13, 14, 15, 16, 17, 18, _
19, 20, 21, 22, 23, 24, 25, 26, 27, _
28, 29, 30, 31, 32, 33, 34, 35, 0, _
1, 2, 3, 4, 5, 6, 7, 8, 9)
' Erstes Zeichen mit 7 multiplizieren, zweites Zeichen mit 3, drittes Zeiche mit 1, _
ab dem nächsten Zeichen wieder von vorn.
c3 = Array(7, 3, 1)
For lnGC = 0 To UBound(c1)
CreateCheckDigit = CreateCheckDigit & "?" 'Right(test, 1)
Next lnGC
CreateCheckDigit = Right(test, 1)
End Function
Danke!
Gruß, René