Avatar billede anne_n_d Novice
20. maj 2020 - 02:53 Der er 3 kommentarer

VBA code til 11 modulus

Hvordan skal man validere et CPR-nummer med en Modulus 11-kontrol? Jeg ved godt, at man skal gange CPR nummer med 432765432.
dvs.
Første tal gange med 4
Anden tal gange med 3 osv.
Men hvordan så man ganger hver eneste tal i VBA? Har ingen ide!

På forhånd tak
Avatar billede Daffodil Professor
20. maj 2020 - 06:07 #1
Avatar billede Jan K Ekspert
20. maj 2020 - 10:35 #2
Du kan faktisk gøre det uden VBA

Formlen forudsætter at cpr-nummeret indtastes celle A1 i formatet xxxxxx-xxxx, altså med bindestreg. Hele formlen skal indtastes ud i et:

=HVIS(VÆRDI(HØJRE(A1;1))=11-REST(VENSTRE(A1)*4+MIDT(A1;2;1)*3+MIDT(A1;3;1)*2+MIDT(A1;4;1)*7+MIDT(A1;5;1)*6+MIDT(A1;6;1)*5+(MIDT(A1;8;1)*4+MIDT(A1;9;1)*3)+MIDT(A1;10;1)*2;11);"Cpr-nummer OK";"Cpr-nummer ikke gyldigt")

Og vær opmærksom på, at Modulus 11 kontrollen ikke virker på alle cpr-numre udstedt efter 2007, hvor den blev afskaffet.
Avatar billede anne_n_d Novice
23. maj 2020 - 20:21 #3
daffodil : har prøvet det, men det lykkes ikke.
Værdien/resultatet af beregningen/valideringen skal indsættes fra J1 til J68
Kan du se, hvad jeg mangler ?

Har skrevet følgende:

Sub cprtest()
    Dim Xvar As Long
    Dim Resultat As Long
    Dim txtRegistrantCPR
    Dim antalPatienter
    Dim CPR
    Dim SlutCiffer
   
    CPR = Worksheets("Vurdering").Range("A2").End(xlDown).Row
   
    If (Worksheets("Vurdering").Range("A2").Value <> "") Then
        antalPatienter = Worksheets("Vurdering").Range("A1").End(xlDown).Row
    Else
        If CPR = antalPatienter Then
    Xvar = Val(Mid(txtRegistrantCPR, 1, 1)) * 4
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 2, 1)) * 3
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 3, 1)) * 2
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 4, 1)) * 7
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 5, 1)) * 6
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 6, 1)) * 5
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 7, 1)) * 4
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 8, 1)) * 3
    Xvar = Xvar + Val(Mid(txtRegistrantCPR, 9, 1)) * 2
    SlutCiffer = Val(Mid(txtRegistrantCPR, 10, 1))
    Resultat = 11 - (Xvar Mod 11)
    End If
   
    If Resultat = 11 Then
        Resultat = 0
    End If
    If Resultat <> SlutCiffer Then
        MsgBox "Forkert CPR-nummer"
    End If
End If

End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester