Formule voor datum omzetten naar leeftijd

Status
Niet open voor verdere reacties.

Jean1010

Nieuwe gebruiker
Lid geworden
16 mrt 2020
Berichten
3
Hoe zou een formule er moeten uitzien om een in veld B de leeftijd te zien van de datum in veld a?
 
Of voor access kan je fldAge : datediff("YYYY";Date1;date2) in een query gebruiken. Deze functie geeft echter alleen de volledige jaren, verjaar ne je bv. in oktober 2000 geboren, dan zal die nu reeds 20 jaar als leeftijd geven. Om de correcte leeftijd te hebben die rekening houdt met de verjaardag:

Code:
Public Function gfgCalcAge(datDateB As Date, Optional datDateC As Date) As Integer
On Error GoTo Err_gfgCalcAge

    Dim intYears As Integer
    
    If datDateC <= #1/1/1900# Then datDateC = Date
    If datDateB > datDateC Then
        gfgCalcAge = -1
        GoTo Exit_gfgCalcAge
    End If
    intYears = Year(datDateC) - Year(datDateB)
    If Month(datDateC) < Month(datDateB) Then
        intYears = intYears - 1
    End If
    If Month(datDateC) = Month(datDateB) And Day(datDateC) < Day(datDateB) Then
        intYears = intYears - 1
    End If
    gfgCalcAge = intYears
    

Exit_gfgCalcAge:
    Exit Function
    
Err_gfgCalcAge:
    gfgCalcAge = -1
    Resume Exit_gfgCalcAge

End Function
 
Laatst bewerkt:
Ah was een Access vraag. Het idee blijft hetzelfde.;)
 
Bedankt voor jullie antwoord.

als ik in het voorbeeld A1 vervang door [GebDat] , dat is het veld waar de geboortedatum instaat (gegevenstype = datum/tijd) aanvaard ie dat niet. Kan niet worden gebruikt in een berekende kolom. als antwoord.
Wat is er mis?

Alvast bedankt voor de hulp
 
Welk van de voorbeelden heb je gebruikt?
 
In een query:
Code:
Leeftijd: DateDiff("yyyy";[Geboortedatum];Date())+(Format([Geboortedatum];"mmdd")>(Format(Date();"mmdd")))
 
En wil je een functie, dan kan het ook in ongeveer 1/3 van de code van noella:
Code:
Function cLeeftijd(Geboortedatum As Date, Optional Peildatum As Date) As Byte
    If Peildatum = 0 Then Peildatum = Date
    If Format(Geboortedatum, "mmdd") > Format(Peildatum, "mmdd") Then
        cLeeftijd = DateDiff("yyyy", Geboortedatum, Peildatum) - 1
    Else
        cLeeftijd = DateDiff("yyyy", Geboortedatum, Peildatum)
    End If
End Function
 
Als je een functie schrijft in VBA, wel niet vergeten om een correcte foutafhandeling toe te voegen. Dit mag de code wel langer maken, maar is toch een essentiëel onderdeel van gestructureerde code.
 
Hangt van de functie af; als hij simpel rechtdoor gaat, is een foutafvanging weliswaar niet fout, maar ook niet nodig. In 25 jaar programmeren heb ik er nog nooit één fout op gekregen. En dan hou je de procedure dus een stuk korter. Bovendien is mijn werkwijze an sich al een stuk korter als de jouwe; kan zelfs in één regel als het moet :).
 
Heel eenvoudig zonder vba...In cel A2 ( of waar je maar wilt)

= DATUMVERSCHIL(A1;VANDAAG();"y")
 
Heel eenvoudig zonder vba...In cel A2 ( of waar je maar wilt)
Deze oplossing was al in bericht #2 aangedragen door VenA. Bovendien is dit een Access forum, dus daar werken we niet met cellen. En (als je de draad had gelezen, had je dat ook al geweten) is de DateDiff oplossing voor queries al door mij in bericht #7 gegeven. Kortom: mosterd na de maaltijd? :)
 
Kan niet worden gebruikt in een berekende kolom. Wat is er mis?
Je mist nog het antwoord op deze vraag, dus bij deze :). Eerst een tegenvraag: waarom gebruik je voor variabele gegevens een (nota bene ook nog eens berekend) veld in een tabel? Totaal nergens voor nodig! Onthoud deze simpele regel: gegevens die je kunt berekenen sla je niet op in een tabel. Die bereken je in een query. En daar was mijn antwoord dus op gebaseerd, en de andere antwoorden ook.

In tabellen kun je inderdaad tegenwoordig berekende velden maken, maar a) zijn die doorgaans nergens voor nodig en b) kun je in de berekeningen nooit andere velden uit de tabel gebruiken. En dat is dus helemaal niet erg, want daar zijn nu eenmaal veel betere oplossingen voor. Zoals inmiddels genoegzaam aangetoond :D.
 
Bedankt voor de reacties, zoals jullie misschien wel merken ben ik een leek wat betreft formules, ik probeer een db op te door zelfstudie, de meeste zaken lukken prima aan de hand van enkele boeken. Echter wat betreft de functie opbouw is men eerder karig met informatie. Vandaar mijn vraag hier. Dankzij jullie reacties heb ik weer wat bijgeleerd.:thumb:
 
@Octafish: een berekend veld in een tabel kan wel degelijk nut hebben. Dan worden de waarden berekend op het moment dat het gegeven wordt aangepast, niet op het moment dat een query wordt gedraaid. In de praktijk kan dit betekenen dat een zoekresultaat na 1 seconde op het scherm staat in plaats van na 10 seconden. Geen enkele gebruiker wil tegenwoordig nog 10 seconden op een zoekresultaat wachten, zeker niet op momenten dat het superdruk is. Het effect kan al merkbaar zijn vanaf een paar duizend resultaatlijnen.
 
@noella: gebruik ze vooral als je denkt ze nodig te hebben. In mijn databases is dat (gelukkig) niet het geval. En voor een gegeven als een leeftijd lijkt het mij volslagen overbodig.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan