DATA.DIFF() è una funzione “nascosta” di Excel utile per calcolare la differenza, in anni, mesi e giorni, tra due date. L’ho chiamata “nascosta” perchè è una funzione non documentata, il che significa che non è elencata tra le altre funzioni nell’help in linea e non esiste neanche tra le funzioni presenti nella scheda FORMULE della barra multifunzione di Excel.
Ma non è una nuova funzione: fu introdotta in Excel 5.0 e Microsoft la documentò in Excel 2000, poi però la documentazione venne rimossa nelle versioni più recenti.
Probabilmente Microsoft incluse la funzione per garantire la compatibilità con Lotus 1-2-3 e non dichiarò mai il motivo della rimozione della relativa documentazione. C’è chi dice per questioni legali, altri affermano invece che il motivo risieda nella troppa somiglianza (in inglese) con la funzione incorporata in VBA datediff(). Sta di fatto che, mentre la documentazione è sparita, la funzione è rimasta, sebbene conosciuta a pochi.
Essendo una funzione non documentata, non aspettatevi di ricevere un aiuto da Excel durante la digitazione di una formula che la contenga; è per questo che è molto importante conoscerne la sintassi:
=DATA.DIFF(data_iniziale; data_finale; "intervallo")
- data_iniziale è la data che indica il giorno di inizio del periodo che vogliamo calcolare. Può essere indicata sia come una data vera e propria (racchiusa tra doppi apici: “), sia come riferimento ad una cella contenente una data;
- data_finale è la data finale del periodo scelto. Anche in questo caso può essere indicata sia come data, sia come riferimento di cella;
- intervallo è l’unità di misura sulla cui base vogliamo ci venga restituito il risultato. Può assumere uno dei seguenti valori:
Codice | Significato | Descrizione |
“m” | Mesi | Il numero di mesi interi tra le due date |
“d” | Giorni | Il numero di giorni tra le due date |
“y” | Anni | Il numero di anni interi tra le due date |
“ym” | Mesi escludendo gli anni | Il numero di mesi tra le due date, come se fossero nello stesso anno |
“yd” | Giorni escludendo gli anni | Il numero di giorni tra le due date, come se fossero nello stesso anno |
“md” | Giorni escludendo gli anni e i mesi | Il numero di giorni tra le due date, come se fossero nello stesso anno e nello stesso mese |

Alcuni errori che potreste incontrare
DATA.DIFF restituisce l’errore #NUM quando data_iniziale è maggiore di data_finale oppure quando “intervallo” non è stato indicato correttamente. Restituisce invece l’errore #VALORE quando una delle due date o entrambe non sono state inserite in un formato data riconosciuto.
Il calcolo della propria età
Uno degli utilizzi più comuni di questa funzione è legato al calcolo dell’età.
In effetti inserendo oggi in una cella la seguente formula:
=DATA.DIFF("13/03/1971";OGGI();"y") & " anni, " & DATA.DIFF("13/03/1971";OGGI();"ym") & " mesi e " & DATA.DIFF("13/03/1971";OGGI();"md") & " giorni"
Excel mi dice: 43 anni, 9 mesi e 9 giorni …secondo me questa funzione non funziona!!! 😉
…a parte gli scherzi
Esiste una valida alternativa?
Ma esiste una valida alternativa all’utilizzo di questa funzione? Purtroppo la risposta è NO. Nessun’altra funzione può darci le stesse funzionalità.
Al fine di non incappare in un futuro (quanto improbabile) abbandono della funzione da parte di Microsoft, potremmo pensare di crearci una nostra funzione personalizzata, funzionalità che in Excel viene chiamata UDF (User Defined Functions), in modo da sfruttare la funzione Datediff() incorporata in VBA (funzione invece pienamente supportata).
Apriamo il nostro file di Excel e premiamo la combinazione di tasti Alt+F11 per attivare l’editor VBA. A questo punto inseriamo un nuovo modulo come nella figura seguente:
Sul modulo appena creato inseriremo il seguente codice
Function DIFFDATA(Data_iniziale As Date, Data_finale As Date, Intervallo As String) As String DIFFDATA = DateDiff(Intervallo, Data_iniziale, Data_finale) End Function
Vediamo a questo punto come Excel riconosca la funzione appena creata
Rispetto alla funzione di default, la nostra UDF accetta dei valori leggermente diversi relativamente al parametro “Intervallo”:
Codice | Descrizione |
“yyyy” | Anni |
“q” | Trimestri |
“m” | Mesi |
“y” | Giorni |
“d” | Giorni |
“w” | Settimane |
“ww” | Settimane del calendario |
“h” | Ore |
“n” | Minuti (visto che “m” sta per mesi) |
“s” | Secondi |
Punti di attenzione
- A differenza della funzione standard, la nostra UDF restituirà un risultato valido anche nel caso di differenze negative;
- Nel caso di “Intervallo” impostato su “yyyy” il valore restituito viene calcolato prendendo in considerazione solo l’anno delle due date inserite, nel caso di “Intervallo” impostato su “m” il valore restituito viene calcolato prendendo in considerazione solo l’anno e il mese delle due date inserite e nel caso di “Intervallo” impostato su “q” il valore restituito viene calcolato prendendo in considerazione i trimestri ai quali appartengono le due date. Ciò vuol dire che, ad esempio, confrontando il 31/12 e il 01/01 dell’anno seguente, la UDF restituirà 1 per gli intervalli “yyyy”, “m” e “q”, anche se è trascorso un solo giorno.
Quindi, la nostra UDF, purtroppo, non ci sarà di aiuto per calcolare la nostra età, a meno di concatenarla con n altre funzioni.