|
| Kommentar Fra : refi |
Dato : 08-09-07 15:48 |
|
Citat En af kolonnerne er medlemmets personnummer. |
Uha da da.....
Har du tilladelse til at "gemme" personnumre.....
Hvis du nøjes med fødselsdag som allerede nævnt er det meget nemmere.....
| |
| Kommentar Fra : Rosco40 |
Dato : 08-09-07 19:22 |
|
Denn e funktion beregner alderen af et cpr-nummer og tager også højre for århundredet:
Kode 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. Dwen forventer at cpr-nummeret er indtastet med bindestreg, fx 121212-1212
| |
| Kommentar Fra : brokke44 |
Dato : 08-09-07 21:39 |
|
Rosco40
Tak skal du ha', det var en ordentlig mundfuld - Jeg troede, at jeg kunne nøjes med en "simpel" excelformel.
Men det virker meget godt med modulet lavet i Visual Basic - DOG hvis du indtaster personnummer f.eks. 070960-xxxx er resultatet 46 år, selvom vedkommende rent faktisk lige er blevet 47 år.
En pudsighed ? eller er der en fornuftig forklaring på dette ?
| |
| Kommentar Fra : brokke44 |
Dato : 08-09-07 22:00 |
|
tusnelda Tusindfryd.
Linket er sådan set meget godt, men de engelske formelværdier svarer ikke til dansksprogede excelversioner - Jeg kan godt finde ud af at "today" skal være "idag", men hvad med "int" ?
| |
| Kommentar Fra : zakia1964 |
Dato : 08-09-07 23:15 |
|
Hej Brokke44
Jeg har engang lavet en hjemmelavet formel netop til formålet. I en celle (f.eks. C4) ved siden af cellen med Cpr.nr. (her B4) har jeg skrevet denne formel for at udtrække datoen af cpr-nummeret.
=VENSTRE(B4;2)&"-"&(MIDT(B4;3;2)&"-"&(MIDT(B4;5;2)))
Det er vigtigt at formatere cellen med denne formel i dato-format (f.eks. 08-09-07)
I celle B1 har jeg skrevet formlen =IDAG() som refererer dags dato.
Når jeg så vil beregne personens alder laver jeg denne formel:
=($B$1-C4)/365
Her trækker jeg de to datoer fra hinanden og dividerer med 365. Cellen hvor denne beregning finder sted skal formateres som tal med 2 decimaler så Excel returnerer 070960-xxxx med resultatet 47,03
| |
| Kommentar Fra : zakia1964 |
Dato : 08-09-07 23:19 |
|
Hej igen!
Hvis du ikke vil have 2 decimaler men kun alderen i år kan du lave denne formel:
=RUND.NED(($B$1-C4)/365;0) i stedet for formlen =($B$1-C4)/365
| |
| Kommentar Fra : brokke44 |
Dato : 09-09-07 09:38 |
|
zakia1964
Ja, det var jo noget nemmere at håndtere. Ulempen her bliver de hjælpeceller, der skal til at få det til at fungere, men de kan jo skjules.
Lige een ting: Man skal vel dividere med 365,25 for at tage højde for skudår - ikk' ?
| |
| Kommentar Fra : zakia1964 |
Dato : 09-09-07 10:28 |
|
Hej Rosco40
Smart formel - men en person med f.eks. cprnr 111264-xxxx får alderen 43 år selvom vedkommende kun er 42 endnu.
| |
| Kommentar Fra : brokke44 |
Dato : 09-09-07 10:40 |
|
Jeg tror nu, at jeg vil bruge modulformlen, selvom den åbenbart har nogle "svagheder".
Vi er flere brugere på denne medlemsliste. Nogle brugere definerer personnummer som xxxxxxxxxx
altså uden bindestreg. Er der et godt tip til at formatere cellen til at udlæse personnummeret som xxxxxx-xxxx altid ?
| |
| Godkendelse af svar Fra : brokke44 |
Dato : 09-09-07 11:24 |
|
Fornemt Rosco40 - mange tak
Den sidste excelformel virker uanset hvad indgangsargumentet er. Den virker endda på færøske medlemmer (som jo ikke har personnumre, som vi).
Jeg sender også points til Zakira - med tak for indsatsen - på en ny tråd
| |
| Kommentar Fra : brokke44 |
Dato : 09-09-07 11:46 |
|
Til slut !
Vil dog - stadig - mene, at der skal divideres med 365,25 aht skudår - har testet det på fødselsdatoer omkring d.d. og så bliver det "mere" korrekt.
Igen stort tak til jer begge.
| |
| Kommentar Fra : tmac |
Dato : 10-12-07 23:51 |
|
Citat =RUND.NED((IDAG()-DATO(MIDT(A1;5;2);MIDT(A1;3;2);VENSTRE(A1;2)))/365;0) |
Rosco40, ved du hvordan man evt kan smække den ind i en autofill i en vba kode, for at få den til at ændre A1'erne automatisk til A2 osv..?
| |
| Kommentar Fra : Rosco40 |
Dato : 11-12-07 19:32 |
| | |
| Kommentar Fra : tmac |
Dato : 11-12-07 22:56 |
|
Okay, lyder virkelig godt ! :)
| |
|
Årstal 2007
3009690808 38,00
Hejsa det er faktisk muligt med en simpel formel
Årstallet indtastes i celle B1 CPR nummer i A2
+(100-(VENSTRE( HØJRE(A2;6);2)))+(B1-2000)
Mvh Ole Myrup
| |
| Kommentar Fra : tmac |
Dato : 13-12-07 22:26 |
|
Citat Årstallet indtastes i celle B1 CPR nummer i A2
+(100-(VENSTRE( HØJRE(A2;6);2)))+(B1-2000) |
Excelhajen; det virker fint :)
Men sidder og roder lidt med en lang CPR-Nr. liste jeg har, og ud fra den vil jeg gerne have den automatisk kan smide en alder i en "alder" kolonne ud fra en beregning den laver på CPR-Nr... :)
Så jeg har en løkke hvor den kører igennem, og plotter alder ind efterhånden..
| |
| Du har følgende muligheder | |
|
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.
Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
| |
|
|