Today is February 29th, and that means, this year we have one more day to be awesome. So lets celebrate it in Excel style!
Lets learn 14 different ways to tell if an year is leap year, using Excel Formulas.
Why 14? because, we are awesome like that.
Why 14 methods to just find the year in cell D4 is leap year or not? Because, we all know that by learning different ways to solve a problem, we become smarter, more awesome and have more fun. So lets roll.

Before we start..,
Since all the 14 methods rely on certain calculations, I have created some names. See below:

All the names are self-explanatory, except the febDays. So lets take a look at it.
febDays formula
For one of the methods, we need to have all the dates in February in a list. If we want the first of Feb as a date, we can use =DATE(year,2,1). But we want all dates in February. That means, we need to use a list (array) in third parameter of DATE like this:
=DATE(year,2,{1,2,3,4,….,28,29})
Instead of typing all the 28/29 numbers, we can use ROW formula to generate these, like:
=ROW($A$1:$A$29) would give me a numbers from 1 thru 29.
But the problem is in many years Feb has only 28 days, and for rest, it has 29 days. So we modify the second part of row formula and use the last DAY of the Feb, like this:
=ROW($A$1: INDEX($A$1:$A$29,DAY(EOMONTH(feb1st,0))))
To get the last day of a month, we use = DAY(EOMONTH(1st date, 0))
I think you can put the rest of pieces together to solve this puzzle.
Moving on,
#1 – The year has 366 days
This is the obvious one. We use =DATE(year+1,1,1)-jan1st=366 to check if there are 366 days between January 1st of next year and this year.
#2 – February 29th is not March 1st
Because in Excel all dates are numbers, when we use a formula like =DATE(2011,2,29), Excel gives us the date of March 1st, even though we wanted 29th Day of February in 2011. So a simple leap year check is to see if February 29 is March 1st or not!
=DATE(year,2,29)<>mar1st
#3 – February has 29 days
This is another obvious test. In a leap year, February has 29 days. So=DAY(EOMONTH(feb1st,0))=29 will be true for leap years.
#4 – February 1st and March 1st are not on same day of week
In non leap years, Feb has 28 days (a multiple of 7), so both Feb and March start on same day of week. So, =WEEKDAY(feb1st)<>WEEKDAY(mar1st) will be TRUE for leap years.
#5 – Adding 365 to January 1st does not change year
Well, that is obvious too. =YEAR(jan1st)=YEAR(jan1st+365) is TRUE for leap years.
#6 – 30th Day of February is March 1st
If an year is leap year, 30th day of February [DATE(year,2,30)] is same as March 1st. So, =DATE(year,2,30)=mar1st is TRUE for leap years.
#7 – 0th Day of March is Feb 29th
In real world there is no zeroth day for any month. But in Excel, since all dates are numbers, 0th day refers to last day of previous month. So, =DAY(DATE(year,3,0))=29 will be TRUE in leap years.
#8 – April 1st and January 1st are on same day of week
In leap years, there are 91 days between January 1st and April 1st. And since 91 is a multiple of 7, both April 1st and January 1st start on same day of week. Hence, =WEEKDAY(jan1st)=WEEKDAY(apr1st) will be true for leap years.
#9 – Only 2 more months start on same day of week as January
In leap years, both April and July start on same day of week as January. (Where as in non-leap years, Only October starts on same day of week as Jan).
To test this, we will of course use the SUMPRODUCT. like this:
=SUMPRODUCT(–(WEEKDAY(DATE(year,ROW($A$2:$A$12),1))=WEEKDAY(jan1st)))=2
The portion WEEKDAY(DATE(year,ROW($A$2:$A$12),1)) gives all the first day of weeks from February to December. And then we just check how many of these are same as January 1st’s week day.
#10 – Next year’s February 1st and this year’s February 2nd are NOT on same day of week
In non-leap years, there are 364 days between February 2nd and next year’s February 1st. Since 364 is a multiple of 7, both of these days are on same day of week. Which is not the case in leap years (as the difference becomes 365). So, =WEEKDAY(feb1st+1)<>WEEKDAY(EDATE(feb1st,12)) will be TRUE for leap years.
#11 – February 1st’s day of week occurs 5 times in that month
This a bit tricky to test, but then again we have SUMPRODUCT. So, =SUMPRODUCT(–(WEEKDAY(febDays)=WEEKDAY(feb1st)))=5 will be TRUE for leap years. The name febDays has all dates in February. I think the rest is easy to understand.
#12 – February starts and ends on same day of week
29 days means both 1st and 29 are on same weekday. So, =WEEKDAY(feb1st)=WEEKDAY(EOMONTH(feb1st,0)) will be true for leap years.
#13 – Spreadsheet day (October 17) and February 1st are on same day of week
Debra, who is a well known Excel blogger & author started the whole spreadsheet day thing. She says, we should celebrate October 17 as spreadsheet day. I love that idea, mainly because, it is just 3 days before my birthday and I like celebrations. And I also like Excel 🙂 So blame her if you do not like this way of testing for leap years.
In leap years, there are 259 days between February 1st and October 17. And since 259 is a multiple of 7 (and 37), we know that they are both on same day of week. So, =WEEKDAY(feb1st)=WEEKDAY(DATE(year,10,17)) is true for leap years.
#14 – Finally, the year is divisible by 4 and if it is divisible by 100, then also by 400
Finally, we are going to test the whole “an year is leap year if it is divisible by 4 and if it is divisible by 100, then it is also divisible by 400” thing. This is a slightly tricky one to test. The formula, =((MOD(year,4)=0)*((MOD(year,100)<>0)+(MOD(year,400)=0))=1) will be TRUE for leap years and false for non-leap years.
Download Leap Year Test Workbook
Click here to download the workbook with all these 14 examples. Play with the formulas, named ranges to understand these techniques.
How do you check it is a leap year?
If you are working and you get paid on first day of a month, then one clear way of knowing leap year is that you get your salary one day later. Other than this, what method would you use to find if an year is leap year. Go ahead and be creative. Share your ideas and formulas using comments. Next leap day is 4 years away. Go
Want to learn how to Dates & Times in Excel – Read these:
If you deal with data that has a lot of date / time stuff, then understanding various Excel features in this area is a must. Read below pages to learn more.
- 10 tips on working with dates & times in Excel
- Calculate difference between 2 dates
- Find thanksgiving day for any year
- Check if 2 ranges of dates overlap
- Rolling months in Excel
- How to convert text to dates
- Even more on Excel dates & times
Want to master Date & Other Excel Formulas?
If you want to learn how various formulas in this post work and know more about everyday Excel formulas, please consider joining my Excel Formula crash course. It has detailed video tutorials on more than 40 everyday Excel formulas and teaches you all the powerful techniques to become a formula ninja.














13 Responses to “Gantt Box Chart Tutorial & Template – Download and Try today”
Hi Chandoo
As one of your students I have followed your detailed example through with great success. However, Excel is acting in an unexpected way and I wonder if you could take a look?
http://cid-95d070c79aef808e.office.live.com/self.aspx/.Public/Gantt%20Box%20Chart.xlsm
On my version, I have to type 40239 (Which equates to 2 Mar 2010) to get the chart to display 31 May 2010 (which should be 40329)!!??
Have I done something wrong or is Excel acting up?
Thx
Oli
PS Your example file in 2007 displays correctly.
Hi,
I like this idea a lot, but I agree the name is a little drab.
As an American I may just be seeing things, but to me the combination of lines and bars on your chart looks like a bunch of cricket bats.
Maybe you could work that into a catchier name. 🙂
Cheers!
Here is some code I use to keep the axis synched.
It may be useful to some of your readers
It is based on a comment I saw on Daily Dose of Excel.
Function SynchGanttAxis(Cname, lower, upper)
'Sets the X min and X max for Category axis
Application.Volatile
On Error Resume Next
'
'Top Horizontal Axis
With ActiveSheet.Shapes(Cname).Chart.Axes(xlCategory, 1)
.MinimumScale = lower
.MaximumScale = upper
End With
'Bottom Horizontal Axis
With ActiveSheet.Shapes(Cname).Chart.Axes(xlValue, 2)
.MinimumScale = lower
.MaximumScale = upper
End With
End Function
Function SynchVerticalAxis(Cname, lower, upper)
Application.Volatile
On Error Resume Next
' Excel 2007 only
'Right hand vertical axis
With ActiveSheet.Shapes(Cname).Chart.Axes(xlValue, 1)
.MinimumScale = 0
.MaximumScale = upper
End With
End Function
@Oli.. Can you check your file again.. I see 40329...
@Dave: Even I saw things.. the bars actually looked like lollipops. How about calling this lollipop chart - now that would be yummy and goes along the tradition of naming charts after eatables (bar, pie, donut...)
@Bob: Superb stuff... thanks for sharing 🙂
Hi Chandoo
This looks really good and I think it can also be applied to show project phases / milestones.
Question: Thinking further could this be amended to display a project lifecycle (Idea through to Implementation say 7 phases) on one bar / row? Just imagine 20 projects within a programme all on one chart one bar each showing their respective lifecycle stages i.e. on one page.
Idea: As the Gantt Box Chart this is quite intensive to set up re formatting etc how about the added extra of once you have completed this to "Save as template" i.e. saves the formatting and layout of the chart as a template so you can apply to future charts. Simple to do and will save the time formatting etc again and again and again.
Therefore tip: Click on your chart demo and then click on Save As template icon (2007) - edit file name and click on save. Ready to use / apply via Templates in Change Chart Type window.
Thanks and be very interested if the lifecycle question can be resolved
Mike
How embarrassing.
I was obviously suffering from numerical dyslexia. I was one of those days.
@Mike H: You can easily make this chart to work like a generic project lifecycle plan chart. All you have to do is,
1. in a separate sheet define the steps of lifecycle and various dates in a table (with 5 columns for each of the projects you have).
2. now use a control cell to input the project name you want to show in the chart
3. based on the input, use OFFSET Formulas to get the correct data
4. Rest is same as the tutorial above
For more info on the dynamic charting visit http://chandoo.org/wp/tag/dynamic-charts/ and http://chandoo.org/wp?s=OFFSET
Your solution is really smart but in the en Excel isn't meant to do stuff like this. I, as a former PM, always thought is was frustrating that you had to do stuff like this for something simple like a Gantt chart. So I built Tom's Planner. And would like to plug it here. I think it really solves the problem you are trying to solve in the most efficient way. Check out http://www.tomsplanner.com for a free account or play around with the demo.
Hi there,
Chandoo - this is really a very nice and helpfull chart - I adopted it, so I can report a forecast or the delay of a certain task (coming from my role as an auditor for projects).
One topic I´m currently struggeling with: I do have a project lasting for lets say 12 month. For a management reporting, I want to have kind of snapshot, lets say one month back and 2 month in the future. I tried with the offset formula, but failed. Any idea?
Thx
Lopi
[...] Ein viel geliebter Klassiker ist die Erstellung von GANTT-Diagrammen mit Excel. Wir hatten das Thema wiederholt schon hier. Chandoo.org hat sich mal wieder mit einer neuen Variante hervorgetan: Das GANTT-Box-Chart. [...]
[...] [...]
Hi Chandoo - fantastic xls. One thing I can't figure out how to do is adjust the alignment of the vertical axis. I would like to left align so that I could indent to represent sub tasks. Can that be done? Or is there a better way?
I've been trying to work out if there's a way to show weekends on the graph. The closest thing I've got is to add them on a secondary axis, but then I haven't been able to keep both axis lined up together! Any ideas?
Following on from this - is it possible to show things like holidays?