Excel: differenza tra due date con data.diff

Come calcolare la differenza tra due date con Excel

Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 01 Maggio 2018
Categoria: Micosoft Office Excel

Excel data.diff

Indice Excel: differenza tra due date con data.diff

Calcolare la differenza tra due date in anni, mesi e giorni

Una funzione utilissima è quella che calcola la differenza tra due date in anni, mesi e giorni; ad esempio potrebbe essere utilizzata per calcolare l’anzianità lavorativa o per conoscere l’età di una persona.
La funzione in questione è nascosta ovvero non è elencata nella guida in linea dell’applicativo e non compare neanche tra le oltre 400 funzioni di Excel, ciononostante, se digitata direttamente nella cella, è funzionante.

Si chiama DATA.DIFF() e presenta la seguente sintassi:
=DATA.DIFF(DataIniziale;DataFinale;Intervallo)
DataIniziale è il giorno iniziale del periodo da calcolare
DataFinale è il giorno finale del periodo da calcolare.
Entrambe gli argomenti suddetti possono essere date racchiuse tra doppi apici o riferimenti a celle contenenti una data.
Intervallo è una stringa che contiene l’unità di misura per ottenere il risultato e può assumere i seguenti valori:

Excel data.diff
Possibili errori:



Se ad esempio si volesse calcolare l’anzianità lavorativa di un impiegato assunto il 1° gennaio 2010 si dovrà usare la seguente formula che contiene anche la funzione OGGI() utile per restituire la data corrente e l’operatore di concatenazione &, utilizzando OGGI() si ha la comodità che il risultato sarà sempre aggiornato alla data corrente, cioè al giorno in cui si apre il file Excel, qualsiasi data sia:
=DATA.DIFF("01/01/2010";OGGI();"y") & " anni, " & DATA.DIFF("01/01/2010";OGGI();"ym") & " mesi, " & DATA.DIFF("01/01/2010";OGGI();"md") & " giorni"
A seconda della data corrente si avrà qualcosa del tipo:
6 anni, 11 mesi, 23 giorni
Ovviamente nulla vieta di avere i 3 riferimenti relativi agli anni, ai mesi e ai giorni in 3 celle diverse; in tal caso basterà mettere le 3 componenti la formula in celle diverse, ad esempio:
=DATA.DIFF("01/01/2010";OGGI();"y")
=DATA.DIFF("01/01/2010";OGGI();"ym")
=DATA.DIFF("01/01/2010";OGGI();"md")

Un altro esempio potrebbe consistere nel voler invece un risultato che non si aggiorni nel tempo come nel caso della differenza tra due date fisse.
Supponendo che nella cella A1 ci sia 01/01/2010 e nella cella B1 ci sia 10/02/2020 le formule risulteranno le seguenti:
=DATA.DIFF(A1;B1;"y")
=DATA.DIFF(A1;B1;"ym")
=DATA.DIFF(A1;B1;"md")


Sommare e detrarre anni, mesi e giorni di più intervalli temporali

Si supponga di aver calcolato 4 intervalli temporali, 3 da sommare ed uno da scorporare come nell'immagine proposta
Sommare e detrarre anni, mesi e giorni di più intervalli temporali
Per ottenere il totale in anni, mesi e giorni vanno calcolate le 3 seguenti formule:
In D7: =SOMMA(D3:D6)+INT((SOMMA(E3:E6)+INT(SOMMA(F3:F6)/30))/12)
In E7: =RESTO(SOMMA(E3:E6)+INT(SOMMA(F3:F6)/30);12)
In F7: =RESTO(SOMMA(F3:F6);30)
Ovviamente i DATA.DIFF della riga 5 vanno con il segno negativo dovendo essere un intervallo da scorporare e quindi:
=-DATA.DIFF(B5;C5;"y") per gli anni e così via per mesi e giorni


Calcoli per date precedenti il 1900

Excel memorizza le date come numeri sequenziali chiamati valori seriali. Per esempio in Excel per Windows, il 1° gennaio 1900 equivale al numero seriale 1 mentre il 1° gennaio 2018 al numero seriale 43.101 (per visualizzare le date come valori seriali è necessario modificare il formato delle celle interessate impostando Generale). Excel per Mac ed Excel per Windows supportano entrambi i sistemi di data 1900 (predefinito in Excel) e 1904 (predefinito in Mac).
Essendo valori sulle date si possono eseguire calcoli come la somma o la sottrazione, ma per quanto appena detto, solo per valori fino al 1900.
Per gestire date antecedenti si può utilizzare il componente aggiuntivo gratuito XDATE.xla di John Walkenbach. Esso aggiunge 8 nuove funzioni ad Excel:

Per attivare il componente XDATE.xla bisogna aprire le Opzioni di Excel e raggiungere i Componenti aggiuntivi, cliccare Vai e spuntare la casella di controllo opportuna. Se non compare il componente aggiuntivo desiderato, questo deve essere prima installato; ci sono più modi a seconda del componente, ad esempio cliccando su Sfoglia nella finestra Componenti aggiuntivi o attraverso un pacchetto di installazione che solitamente ha estensione msi o infine dall'Area download di Microsoft.

Se data.diff verrà tolta

Supponendo che la Microsoft, nelle successive versioni dell'applicativo Excel, decida di non supportare più tale funzione, è possibile ricorrere al codice VBA (Visual Basic for Application); è necessario agire dal VBE (Visual Basic Editor) aprendolo dalla scheda Sviluppo attraverso l'icona Visual Basic o tramite ALT+F11, cliccando la voce di menù Inserisci posta in alto e scegliendo Modulo va inserito il codice che segue:
Function DIFFDATA(Data_iniziale As Date, Data_finale As Date, Intervallo As String) As String
DIFFDATA = DateDiff(Intervallo, Data_iniziale, Data_finale)
End Function

In tal modo si crea una UDF (User-Defined Function) cioè una funzione definita dall’utente che apparirà come le altre una volta cominciato a scrivere in una cella =d, o quando nell’elenco a discesa Oppure selezionare una categoria della finestra Inserisci funzione, si sceglierà Definite dall’utente.
L’argomento Intervallo assumerà i seguenti valori:
“yyyy” Anni
“q” Trimestri
“m” Mesi
“y” Giorni
“d” Giorni
“w” Settimane
“ww” Settimane del calendario
“h” Ore
“n” Minuti
“s” Secondi
(ww calcola tra il primo giorno della settimana dove c’è la Data_iniziale e il primo giorno della settimana dove c’è la Data_finale).
Ad esempio se in A1 c’è la data iniziale ed in B1 la data finale, la funzione =DIFFDATA(A1;A2;"yyyy") restituirà la differenza in anni; q in trimestri e così via.

Per ricevere nella tua mail tips and tricks, ovvero suggerimenti e trucchi su Microsoft Office e Web in generale iscriviti gratuitamente alla newsletter


Richiedi un preventivo gratuito

Consento il trattamento dei dati personali ai sensi del GDPR 2016/679 - Privacy policy