Bob si chiede se esiste un modo semplice per determinare se l’anno di una data particolare è un anno bisestile, ai fini del calcolo dell’interesse e del numero di giorni di composizione.

Sappiamo tutti che se un anno è divisibile per 4, allora è un anno bisestile, giusto? In realtà è sbagliato. Quindi, non puoi semplicemente dividere il numero di un anno per 4, come di seguito, per determinare se è un anno bisestile:

=IF(MOD(YEAR(A1), 4) = 0, "Leap", "Regular")

La formula funzionerà per tutte le date all’interno di questo secolo (anni dal 2000 al 2099), ma non funzionerà in modo affidabile al di fuori di tale intervallo. Il motivo è perché “divisibile per 4” non è l’unico test per un anno bisestile. Se l’anno è un anno del secolo (divisibile per 100), allora è un anno bisestile solo se è divisibile per 400. Quindi l’anno 2000 è un anno bisestile, ma l’anno 2100 non lo è.

Se vuoi un modo a prova di proiettile per determinare se una data si verifica entro un anno bisestile, la tua formula deve essere più complessa:

=IF(OR(AND(MOD(YEAR(A1),4)=0,MOD(YEAR(A1),100)>0), MOD(YEAR(A1),400)=0),"Leap","Regular")

Nota che questa è una singola formula; è mostrato qui su due righe in modo che si adatti completamente allo schermo. La formula verifica tutte e tre le condizioni necessarie per determinare se una data rientra in un anno bisestile.

Ovviamente, un approccio diverso è semplicemente capire se un dato anno ha un 29 febbraio al suo interno. Ci sono un numero qualsiasi di formule che potrebbero essere utilizzate per eseguire questa operazione:

=IF(DAY(EOMONTH("1Jan"&YEAR(A1),1))=29, "Leap", "Regular")

=IF(MONTH(DATE(YEAR(A1),2,29))=2, "Leap", "Regular")

=IF(DAY(DATE(YEAR(A1),2,29))=29, "Leap", "Regular")

=IF(DAY(DATE(YEAR(A1),3,0))=29, "Leap", "Regular")

Tutti i metodi descritti finora funzionano bene per qualsiasi data supportata da Excel, con un’eccezione. Quelli che utilizzano la funzione DATA (gli ultimi tre mostrati sopra) non funzioneranno se la data nella cella A1 è nell’anno 1900. Quelli restituiranno sempre che 1900 è un anno bisestile, anche se non lo è. (È interessante notare che la funzione EOMONTH non presenta lo stesso problema della funzione DATE a questo proposito.)

Se devi lavorare con date antecedenti a quelle supportate da Excel (prima del 1 gennaio 1900), dovrai lavorare direttamente con gli anni invece di estrarre l’anno da una data di Excel. La variazione sulla formula dei tre test funzionerà perfettamente, se la cella A1 contiene solo un anno:

=IF(OR(AND(MOD(A1,4)=0,MOD(A1,100)>0),MOD(A1,400)=0),"Leap","Regular")

È inoltre possibile creare una funzione definita dall’utente che verifichi la data.

Questo approccio funzionerà perfettamente indipendentemente dal fatto che la cella contenga un valore di data o un valore di testo per una data. (Se inserisci un valore di data non supportato in una cella, ad esempio 1/1/1896, Excel considera la voce come un valore di testo anziché tentare di analizzarla come una data.) L’esempio seguente funziona correttamente con tutte le date supportate da VBA, che è compreso tra l’anno 100 e l’anno 9999:

Function IsLeap1(c As Range) As Boolean     YearNo = Year(c.Value)

If YearNo Mod 100 = 0 Then        IsLeap1 = ((YearNo \ 100) Mod 4 = 0)

Else        IsLeap1 = (YearNo Mod 4 = 0)

End If End Function

Per utilizzare la funzione nel tuo foglio di lavoro devi inserire una formula come questa:

=IF(IsLeap1(A1),"Leap", "Regular")

La seguente macro a riga singola funziona usando il trucco di capire se c’è un 29 febbraio nell’anno in questione:

Function IsLeap2(c As Range)

IsLeap2 = IsDate("2/29/" & Year(c.Value))

End Function

Si fa riferimento alla macro nello stesso modo nel foglio di lavoro della macro precedente:

=IF(IsLeap2(A1),"Leap", "Regular")

Se hai bisogno di metodi più creativi per determinare se una data è in un anno bisestile, dai un’occhiata a questo articolo:

http://chandoo.org/wp/2012/02/29/check-leap-year-using-excel/

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (9978) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.