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.dkIf 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.