How to count number of leap years between two dates in Excel?

In Excel, to count the number of years between two given dates may be easy for most of users, but, can you only count the number of leap years also called intercalary year between two dates? Here I introduce a formula can help you to quickly calculate the number of leap years between a date range in Excel.

Count leap years in a date range with formula


Add Years/Months/Days to Date

To quickly add a specific number of days to a given date, Kutools for Excel's Add Years/Months/Days to Date utilities can give you a favor.
doc add year month day
Office Tab Enable Tabbed Editing and Browsing in Office, and Make Your Work Much Easier...
Kutools for Excel Solves Most of Your Problems, and Increases Your Productivity by 80%
  • Reuse Anything: Add the most used or complex formulas, charts and anything else to your favorites, and quickly reuse them in the future.
  • More than 20 text features: Extract Number from Text String; Extract or Remove Part of Texts; Convert Numbers and Currencies to English Words.
  • Merge Tools: Multiple Workbooks and Sheets into One; Merge Multiple Cells/Rows/Columns Without Losing Data; Merge Duplicate Rows and Sum.
  • Split Tools: Split Data into Multiple Sheets Based on Value; One Workbook to Multiple Excel, PDF or CSV Files; One Column to Multiple Columns.
  • Paste Skipping Hidden/Filtered Rows; Count And Sum by Background Color; Send Personalized Emails to Multiple Recipients in Bulk.
  • Super Filter: Create advanced filter schemes and apply to any sheets; Sort by week, day, frequency and more; Filter by bold, formulas, comment...
  • More than 300 powerful features; Works with Office 2007-2019 and 365; Supports all languages; Easy deploying in your enterprise or organization.

arrow blue right bubble Count leap years in a date range with formula


To count leap years between two dates, you just need to do as this:

Select a blank cell that you will place the counted result at, C2 for instance, and enter this formula
=DATE(YEAR(B2),1,1)-DATE(YEAR(A2),1,1)-((YEAR(B2)-YEAR(A2))*365)+AND(MONTH(DATE(YEAR(A2),2,29))=2,MONTH(DATE(YEAR(B2),2,29))=2)*1
then press Enter key to get the result. See screenshot:
doc count leap year 1

Tip: In the formula, A2 is the start date and B2 is the end date, you can change them as you need.

doc download 1

Say something here...
symbols left.
You are guest ( Sign Up? )
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Tom Moore · 1 months ago
    A more useful function would be to calculate the number of times Feb 29 occurs between 2 dates.
  • To post as a guest, your comment is unpublished.
    acbcravo@gmail.com · 6 months ago
    Tentei a fórmula acima, mas ainda gerava erro no numero de anos bissextos, então fiz uma função em VBA que faz a verificação ano a ano no intervalo.
    Após incluir esta macro abaixo, para utilizar use a função =ContBissexto(A1;B1), o resultado é a quantidade de anos bissextos no período: Espero ter ajudado:

    Function ContBissexto(Ini As Date, Fim As Date) As Integer
    On Error Resume Next

    Dim AnoIni As Integer
    Dim AnoFim As Integer
    Dim contB As Integer
    contB = 0
    'DEFINE O ANO DE INICIO DA CONTAGEM DO PERÍODO BISEXTO
    If Ini <= DateSerial(Year(Ini), 3, 1) - 1 Then
    AnoIni = Year(Ini)
    Else
    AnoIni = Year(Ini) + 1
    End If
    'DEFINE O ANO DE FIM DA CONTAGEM DO PERÍODO BISEXTO
    If Fim > DateSerial(Year(Fim), 2, 28) Then
    AnoFim = Year(Fim)
    Else
    AnoIni = Year(Fim) - 1
    End If

    For i = AnoIni To AnoFim
    If Day(DateSerial(i, 3, 1) - 1) = 29 Then contB = contB + 1
    Next

    ContBissexto = contB

    End Function
  • To post as a guest, your comment is unpublished.
    Antônio Cravo · 6 months ago
    A contagem gerava erro no numero de anos bissextos, então fiz uma função em VBA que faz a verificação ano a ano no intervalo.
    Após incluir esta macro abaixo, para utilizar use a função =ContBissexto(A1;B1), o resultado é a quantidade de anos bissextos no período:


    Function ContBissexto(Ini As Date, Fim As Date) As Integer
    On Error Resume Next

    Dim AnoIni As Integer
    Dim AnoFim As Integer
    Dim contB As Integer
    contB = 0
    'DEFINE O ANO DE INICIO DA CONTAGEM DO PERÍODO BISSEXTO
    If Ini <= DateSerial(Year(Ini), 3, 1) - 1 Then
    AnoIni = Year(Ini)
    Else
    AnoIni = Year(Ini) + 1
    End If
    'DEFINE O ANO DE FIM DA CONTAGEM DO PERÍODO BISSEXTO
    If Fim > DateSerial(Year(Fim), 2, 28) Then
    AnoFim = Year(Fim)
    Else
    AnoIni = Year(Fim) - 1
    End If

    For i = AnoIni To AnoFim
    If Day(DateSerial(i, 3, 1) - 1) = 29 Then contB = contB + 1
    Next

    ContBissexto = contB

    End Function
  • To post as a guest, your comment is unpublished.
    Fabian Ries · 1 years ago
    Oi amigo,

    Excelente fórmula!

    Trabalhei com ela e percebi que há uma divergência quando o primeiro e/ou o segundo intervalo são anos bissextos. Tomei a liberdade de corrigir (em português):


    =DATA(ANO(B2);1;1)-DATA(ANO(A2);1;1)-((ANO(B2)-ANO(A2))*365)+E(ANO(A2)=ANO(B2);MÊS(DATA(ANO(A2);2;29))=2;A2<=DATA(ANO(A2);2;29);B2>=DATA(ANO(B2);2;29))+E(ANO(A2)