Calcolare età con anni mesi e giorni

Anonimo
2017-03-28T19:13:42+00:00

Salve, sono neofita per Access. Da uno sguardo al forum non ho trovato risposte.

Da poco sto esercitandomi con Access 2007 in un semplicisimo database di tipo classico (Cognome, nome, nascita, indirizzo, etc..)

Mi trovo di fronte a questo problema: ho bisogno di calcolare l'età esatta composta da anni, mesi e giorni e, per esempio, chi è nato il 25/08/1991 con la formula =DateDiff("aaaa";[DataNascita];Date())+(Format(Date();"mmgg")<Format([DataNascita];"mmgg")) mi da per risultato 25

e con la formula =DateDiff("aaaa";[DataNascita];Now()) mi da 26

a me servirebbe avere un risultato così(ad esempio); 25anni, 6mesi, 5giorni.

Ho trovato quest'altra soluzione: = DateDiff("yyyy", [Birthdate], Now())+ Int(Format(now(), "mmdd") < Format ([data di nascita], "mmdd"))   ma non riesco ad adattarla al mio scopo che consiste nell'inserire in una maschera l'età, calcolata in anni mesi e giorni, e che fa riferimento ad una tabella classicamente anagrafica.

Vorrei inoltre trovare un modo che mi consenta di sommare ad una certa data un certo numero di anni (p.es. alla data 18/05/1994 vorrei sommare il numero di 4 anni e quindi ottenere 18/05/1998)

E' possibile questo ?

Vi ringrazio

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

8 risposte

Ordina per: Più utili
  1. Anonimo
    2017-03-28T23:09:20+00:00

    Cerca su Amazon access 2007.

    La serie Bible è buona, quelli di Microsoft Press anche. Se vuoi continuare verso le cose difficili, non prendere la serie "For Dummies".

    Se cerchi in inglese hai più scelta.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-03-28T20:00:56+00:00

    Ciao,

    Per il primo problema prova a dare un'occhiata qui: http://stackoverflow.com/questions/26378047/excel-vba-datediff-to-calculate-months-days-and-month-together

    Per il secondo: =DateAdd("yyyy";1;[datNascita])

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  3. Anonimo
    2017-03-28T21:02:02+00:00

    ciao Aurelio,

    partiamo tutti da zero, e quindi se sei qui vuoi imparare oltre che risolvere un problema, giusto....?

    Prova a mettere in pratica quanto consigliato...

    Credo che per copiare incollare due funzioni, testarle nella finestra immediata si possa approciare come inizio, che dici...? ti ho anche indicato passo passo come procedere.

    Un po' di buona volontà, dai...!!!

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-03-28T20:42:48+00:00

    Vi ringrazio per la solerzia e, sono sicuro,dell'efficacia delle vostre soluzioni.

    Purtroppo avevo omesso di scrivere che la mia conoscenza del VBA è pressochè uguale a zero......

    Pertanto vi chiedo se posso inviarvi un esempio del mio DB in cui voi cortesemente potreste inserire tutti gli elementi utili al mio scopo, se vi va.

    Spero di non chiedere troppo.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-03-28T20:29:50+00:00

    ciao Aurelio,

    in un modulo standard copia una di queste due funzioni :

    Public Function YMDgone(ByVal argdate As Date)

    ' shows difference between argDate and today

    ' by Karl Donaubauer 24.1.1999 using the DevAshishian boolean-trick ;-)

    Dim Ygone As Integer, Mgone As Byte, Dgone As Byte

    If IsNull(argdate) Then Exit Function

    Ygone = DateDiff("yyyy", argdate, Date) _

    • Int(Format(Date, "mmdd") < Format(argdate, "mmdd"))

    Mgone = Int((DateDiff("m", argdate, Date) _

    • Int(Format(Date, "dd") < Format(argdate, "dd")))) Mod 12

    If Day(argdate) <= Day(Date) Then

        Dgone = Format(Date, "dd") - Format(argdate, "dd")

    Else

        Dgone = Day(DateSerial(Year(argdate), Month(argdate) + 1, 0)) _

        - Day(argdate) + Day(Date)

    End If

    YMDgone = Ygone & " year" & IIf(Ygone = 1, " ", "s ") _

    & Mgone & " month" & IIf(Mgone = 1, " ", "s ") _

    & Dgone & " day" & IIf(Dgone = 1, " ", "s")

    End Function

    Public Function fAge(dteStart As Variant, dteEnd As Variant) As Variant

    '*******************************************

    'Purpose:   Accurately return the difference

    '           between two dates, expressed as

    '           years.months.days

    'Coded by:  raskew (from MS Access forum)

    'Inputs:    From debug (immediate) window

    '           1) ? fAge(#12/1/1950#, #8/31/2006#) 'Calculate btw 2 specific dates

    '           2) ? fAge(#12/30/2005#, Date()) ' Calculate as of today's date

    '*******************************************

    Dim intHold   As Integer

    Dim dayhold   As Integer

       'correctly return number of whole months difference

       'the (Day(dteEnd) < Day(dteStart)) is a Boolean statement

       'that returns -1 if true, 0 if false

       intHold = DateDiff("m", dteStart, dteEnd) + (Day(dteEnd) < Day(dteStart))

       'correctly return number of days difference

       If Day(dteEnd) < Day(dteStart) Then

          dayhold = DateDiff("d", dteStart, DateSerial(Year(dteStart), Month(dteStart) + 1, 0)) + Day(dteEnd)

       Else

          dayhold = Day(dteEnd) - Day(dteStart)

       End If

       fAge = LTrim(Str(intHold \ 12)) & " years " & LTrim(Str(intHold Mod 12)) & " months " & LTrim(Str(dayhold)) & " days"

    End Function

    presa da qui :https://www.devhut.net/2010/06/22/ms-access-calculate-the-age/

    la prima è di Karl Donaubauer [Access MVP].

    la prima la richiami dalla finestra immediata in questo modo :

     ? YMDgone(#1991/08/25#)

    25 years 7 months 3 days

    la seconda:

    ? fAge(#1991/08/25#,date())

    25 years 7 months 3 days

    per sommare 4 anni alla data a 18/05/1994 :

    ? dateadd("yyyy",4,#1994/05/18#)

    18/05/1998.

    ciao, Sandro.

    [ edit ]

    mi sembrava di avere realizzato qualcosa di questo tipo di mio :

    Public Function myDate(mydate1 As Variant, _

                            mydate2 As Variant) As String

    If IsNull(mydate1) Or IsNull(mydate2) Then Exit Function

    Dim lngYear  As Long

    Dim lngMonth As Long

    Dim lngDays  As Long

    Dim strDate  As String

    lngYear = DateDiff("yyyy", mydate1, mydate2) - IIf(Format$([mydate1], "mmdd") > Format$([mydate2], "mmdd"), 1, 0)

    mydate1 = DateAdd("yyyy", lngYear, mydate1)

    lngMonth = DateDiff("m", mydate1, mydate2) - IIf(Format$([mydate1]) > Format$([mydate2]), 1, 0)

    mydate1 = DateAdd("m", lngMonth, mydate1)

    lngDays = DateDiff("d", mydate1, mydate2)

    If lngYear > 0 Then

        strDate = str(lngYear) & Chr(32) & IIf(lngYear = 1, "anno", "anni") & Chr(32)

    End If

    If lngMonth > 0 Then

        strDate = strDate & lngMonth & Chr(32) & IIf(lngMonth = 1, "mese", "mesi") & Chr(32)

    End If

    If lngDays > 0 Then

        strDate = strDate & lngDays & Chr(32) & IIf(lngDays = 1, "giorno", "giorni")

    End If

    myDate = strDate

    End Function

    la richiami così :

    ? myDate(#1991/08/25#,#2017/03/28#)

     25 anni 7 mesi 3 giorni

    buono studio

    [end edit]

    La risposta è stata utile?

    0 commenti Nessun commento