Avatar billede jjjakobsen Mester
21. juni 2010 - 15:33 Der er 3 kommentarer og
1 løsning

Beregning af alder

Hvordan beregner man hvor mange der i år (2010) fylder 60 år ud fra deres cprnumre?
Avatar billede be_nice Juniormester
21. juni 2010 - 16:47 #1
Jeg er tidligere faldet over denne løsning, til at finde alderen ud fra et personnummer:
-----
Denne funktion beregner alderen af et cpr-nummer og tager også højre for århundredet:

Function CprAlder(cpr As String) As Byte
'JKrons, 2002
'Finder fødsels-århundredet ud af
'et cpr-nummer på formen xxxxxx-xxxx
'Den virker kun indtil 2036, hvor cpr-nummersystemet i
'dets nuværende form ophører med at fungere
'se nærmere på www.cpr.dk
If Not IsNull(cpr) Then

    Dim bytCent As Byte
    Dim bytSevdig As Byte
    Dim bytCpryear As Byte
    Dim bytCprmonth As Byte
    Dim bytCprday As Byte
    Dim strErrtxt As String
    Dim datTemp As Date

   
    strErrtxt = "Der eksisterer ikke lovlige cpr-numre, hvor årstallet er "
    bytSevdig = Mid(cpr, 8, 1)
    bytCpryear = Mid(cpr, 5, 2)
    bytCprmonth = Mid(cpr, 3, 2)
    bytCprday = Mid(cpr, 1, 2)
   
    Select Case bytSevdig
        Case 0 To 3
            bytCent = 19
        Case 4, 9
            If bytCpryear <= 36 Then
                bytCent = 20
            Else
                bytCent = 19
            End If
        Case 5 To 8
            If bytCpryear <= 36 Then
                bytCent = 20
                ElseIf bytCpryear >= 58 Then
                bytCent = 18
                Else
                strErrtxt = strErrtxt & bytCpryear & " og 7. ciffer er " & bytSevdig
                MsgBox strErrtxt, vbOKOnly + vbCritical, "CPR-nummer fejl"
                Exit Function
            End If
           
    End Select

    datTemp = DateSerial(bytCent & bytCpryear, bytCprmonth, bytCprday)

    If datTemp > Date Then
        MsgBox "Den pågældende person er ikke født endnu", vbOKOnly + vbExclamation, "CPR-nummer fejl"
        Exit Function
    End If
   
    If Mid(datTemp, 7, 2) = 18 Then
        CprAlder = Right(DatePart("yyyy", Date - datTemp), 2) + 100
        Else
        CprAlder = Right(DatePart("yyyy", Date - datTemp), 2)
    End If
End If

End Function

Læg den ind i et modul. I arket bruger du den sådan: cpralder(a1), hvor cpr-nummeret står i A1. Den forventer at cpr-nummeret er indtastet med bindestreg, fx 121212-1212
-----
Så skal du "bare" have det koblet sammen med et årstal du kan regne ud fra.
Avatar billede newbieatphp Nybegynder
22. juni 2010 - 00:07 #2
Da du ved hvor i Cpr.nr. årstallet står, så kan du forkorte Cpr.nr. til det vigtige ved at bruge formlerne venstre og højre.

Ved at bruge venstre først, så undgår man spørgsmålet om cpr.nr. står som: xxxxxx-xxxx eller xxxxxxxxxx eller kun står som fødselsdato.


Derfor følgende formel:
=HVIS(HØJRE(VENSTRE(A1;6);2)="50";"fylder 60 i år";"bliver ikke 60 dette år")

Hvor A1 er cpr.nr der skal tjekkes.
Årsagen til 50 i "" skyldes at excel vil opfatte det som tekst, hvis cpr.nr står på xxxxxx-xxxx - men det virker også hvis feltet opfattes som tal.
Avatar billede jjjakobsen Mester
22. juni 2010 - 07:46 #3
Tak for svaret newbieatphp.
Må jeg bé dig svare så jeg kan lukke spørgsmålet.
Avatar billede newbieatphp Nybegynder
22. juni 2010 - 09:59 #4
jeps, det super
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
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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