Formula per contare Giorni - Mesi - Anni

di il
11 risposte

Formula per contare Giorni - Mesi - Anni

Buongiorno a tutti, avrei necessità di scrivere un'espressione in access da inserire in una query che mi permetta date due DATE in formato gg/mm/aaaa di restituirmi come sotto descritto
Data iniziale 09/10/2004
Oggi 24/09/2014
Anni: 9
Mesi: 11
Giorni: 16
Ovvero qualora superi i 30 giorni o il 12 mese scatto rispettivamente o il mese successivo o l'anno
Con excel è fattibile ma mi sarebbe utile inserire questo tipo di formula all'interno del mio DB. Grazie mille a tutti.

11 Risposte

  • Re: Formula per contare Giorni - Mesi - Anni

    La cosa è semplice... anche in Access io farei una funzione così
    
    Function DTA(Data1 As Date, data2 As Date) As String
        Dim a   As Integer
        Dim m   As Integer
        Dim g   As Integer
        
        Dim Ndm     As Date
        Dim Ndg     As Date
        
        a = DateDiff("yyyy", Data1, data2, vbMonday, vbFirstJan1)
    
        Ndm = DateAdd("yyyy", a, Data1)
    
        m = DateDiff("m", Ndm, data2)
    
        Ndg = DateAdd("m", m, Ndm)
    
        g = DateDiff("d", Ndg, data2)
        
        DTA = "a=" & a & " m=" & m & " g=" & g
    End Function
  • Re: Formula per contare Giorni - Mesi - Anni

    Grazie per il suggerimento adesso provo e se funzione ti faccio una Statua.
  • Re: Formula per contare Giorni - Mesi - Anni

    @Alex ha scritto:


    La cosa è semplice... anche in Access io farei una funzione così
    
    Function DTA(Data1 As Date, data2 As Date) As String
        Dim a   As Integer
        Dim m   As Integer
        Dim g   As Integer
        
        Dim Ndm     As Date
        Dim Ndg     As Date
        
        a = DateDiff("yyyy", Data1, data2, vbMonday, vbFirstJan1)
    
        Ndm = DateAdd("yyyy", a, Data1)
    
        m = DateDiff("m", Ndm, data2)
    
        Ndg = DateAdd("m", m, Ndm)
    
        g = DateDiff("d", Ndg, data2)
        
        DTA = "a=" & a & " m=" & m & " g=" & g
    End Function
    Ciao @alex, scusami se ti disturbo nuovamente, ma c'è qualche cosa che mi sfugge, sicuramente sbaglio io qualche procedura. Allora io ho la mia bella maschera su cui è basata la query in argomento. Bene allora nella maschera creo un modulo e quindi la funzione ma non riesco a farlo funzionare. So che sto sbagliando, ma se mi indichi la strada te ne sarei grato.
    Ciao
  • Re: Formula per contare Giorni - Mesi - Anni

    Olivotto ha scritto:


    @Alex ha scritto:


    La cosa è semplice... anche in Access io farei una funzione così
    
    Function DTA(Data1 As Date, data2 As Date) As String
        Dim a   As Integer
        Dim m   As Integer
        Dim g   As Integer
        
        Dim Ndm     As Date
        Dim Ndg     As Date
        
        a = DateDiff("yyyy", Data1, data2, vbMonday, vbFirstJan1)
    
        Ndm = DateAdd("yyyy", a, Data1)
    
        m = DateDiff("m", Ndm, data2)
    
        Ndg = DateAdd("m", m, Ndm)
    
        g = DateDiff("d", Ndg, data2)
        
        DTA = "a=" & a & " m=" & m & " g=" & g
    End Function
    ... nella maschera creo un modulo e quindi la funzione ma non riesco a farlo funzionare...
    Perché inserisci il codice della funzione nel modulo di una maschera? Inseriscila in un modulo standard, poi nella query scrivi
    Nomechevuoi: DTA([datainiziale];date())
    (anche se nei miei test quella funzione dà risultati strani... devo approfondire)
    In un controllo di una maschera devi scriverlo nell'origine del controllo
    =DTA([datainiziale];date()
    Devi stare attento qui a dirgli la posizione giusta di [datainiziale] (se è già nella maschera non ci sono problemi, altrimenti lo devi "guidare" alla ricerca dell'informazione)
  • Re: Formula per contare Giorni - Mesi - Anni

    Ciao grazie per la tua risposta rapidissima, sai quando entri dentro un errore continui a farlo senza accorgerti di quello che fai! Hai ragione, la funzione "funziona" anche se mi da qualche errore visto che mi calcola i mesi con valore negativo. Se risolvi il problema trovi soluzioni alternativa rimaniamo in contatto così da trovare il codice corretto per risolvere il problema.
  • Re: Formula per contare Giorni - Mesi - Anni

    Philcattivocarattere ha scritto:


    (anche se nei miei test quella funzione dà risultati strani... devo approfondire)
    confermo: la funzione è da rivedere. Ma non so ancora come. .
    Esempio: se la data inziale è il 31/10/2013, DTA([Datainiziale], date()) darà a=1 m=-1 g=-1 che è un risultato "giusto" per come è impostata la funzione, è per questo che bisogna metterci mano. Ripeto: non so ancora come. .
    Ops... l'avevi già scoperto e scritto tu.
  • Re: Formula per contare Giorni - Mesi - Anni

    Tranquillo figurati....cercherò di studiare il problema nel caso rimaniamo in contatto. Se vuoi sono anche su fb olivotto marino.
    Ciao
  • Re: Formula per contare Giorni - Mesi - Anni

    Olivotto ha scritto:


    Tranquillo figurati
    Sì... prima ho messo questa solo per solidarietà (e perché potevo accorgermi prima che c'era qualcosa che non andava, bastava provarla). Affronto (quasi) tutte le questioni del forum con questa preoccupazione:
  • Re: Formula per contare Giorni - Mesi - Anni

    @Alex ha scritto:


    La cosa è semplice... anche in Access io farei una funzione così
    
    Function DTA(Data1 As Date, data2 As Date) As String
        Dim a   As Integer
        Dim m   As Integer
        Dim g   As Integer
        
        Dim Ndm     As Date
        Dim Ndg     As Date
        
        a = DateDiff("yyyy", Data1, data2, vbMonday, vbFirstJan1)
    
        Ndm = DateAdd("yyyy", a, Data1)
    
        m = DateDiff("m", Ndm, data2)
    
        Ndg = DateAdd("m", m, Ndm)
    
        g = DateDiff("d", Ndg, data2)
        
        DTA = "a=" & a & " m=" & m & " g=" & g
    End Function

    Olivotto ha scritto:


    Tranquillo figurati....cercherò di studiare il problema nel caso rimaniamo in contatto. Se vuoi sono anche su fb olivotto marino.
    Ciao
    Integrazione al codice di @Alex
    ...
    a = DateDiff("yyyy", Data1, data2, vbMonday, vbFirstJan1)
    If DateAdd("yyyy", a, Data1) > data2 Then
    a = a - 1
    End If
    
    Ndm = DateAdd("yyyy", a, Data1)
    
    m = DateDiff("m", Ndm, data2)
    If DateAdd("m", m, Ndm) > data2 Then
    m = m - 1
    End If
    ...
    Prova a fare "calcoli estremi" (con inizio e fine mese) per vedere se il risultato ti soddisfa.
    Per capire il comportamento della funzione, sia in versione iniziale sia modificata, riporto la spiegazione presa da qui http://office.microsoft.com/it-it/access-help/funzione-datediff-HA001228811.aspx
    "Quando si esegue il confronto tra il 31 dicembre e il 1 gennaio dell'anno immediatamente successivo, la funzione DateDiff per l'anno ("aaaa") restituisce 1 anche se è trascorso un solo giorno."
    Stessa cosa per il mese: DateDiff in mesi tra 30/06 e 01/07 è 1 mese.
  • Re: Formula per contare Giorni - Mesi - Anni

    Olivotto ha scritto:


    ...
    Ovvero qualora superi i 30 giorni o il 12 mese scatto rispettivamente o il mese successivo o l'anno
    Con excel è fattibile ...
    come l'avresti scritta su excel? Curiosità.
  • Re: Formula per contare Giorni - Mesi - Anni

    Ciao allora in excel l'ho scritta in questa maniera:
    Data iniziale : 09/10/2004 (C5)
    Data finale: 31/07/2014 (D5)
    formula per Anni: =SE(C5>0;DATA.DIFF($C5;$D5;"y");"")
    formula per Mese: =SE(D5>0;DATA.DIFF($C5;$D5;"ym");"")
    formula per Giorni: =SE(C5>0;DATA.DIFF($C5;$D5;"md")+1;"")
Devi accedere o registrarti per scrivere nel forum
11 risposte