If you are a regular visitor of this blog, you've probably noticed a few articles covering different aspects of Excel conditional formatting. And now we will leverage this knowledge and create spreadsheets that differentiate between weekdays and weekends, highlight public holidays and display a coming deadline or delay. In other words, we are going to apply Excel conditional formatting to dates.
If you have some basic knowledge of Excel formulas, then you are most likely familiar with some of date and time functions such as NOW, TODAY, DATE, WEEKDAY, etc. In this tutorial, we are going to take this functionality a step further to conditionally format Excel dates in the way you want.
Excel conditional formatting for dates (built-in rules)
Microsoft Excel provides 10 options to format selected cells based on the current date.
- To apply the formatting, you simply go to the Home tab > Conditional Formatting > Highlight Cell Rules and select A Date Occurring.
- Select one of the date options from the drop-down list in the left-hand part of the window, ranging from last month to next month.
- Finally, choose one of the pre-defined formats or set up your custom format by choosing different options on the Font, Border and Fill tabs. If the Excel standard palette does not suffice, you can always click the More colors… button.
- Click OK and enjoy the result! : )
However, this fast and straightforward way has two significant limitations - 1) it works for selected cells only and 2) the conditional format is always applied based on the current date.
Excel conditional formatting formulas for dates
If you want to highlight cells or entire rows based on a date in another cell, or create rules for greater time intervals (i.e. more than a month from the current date), you will have to create your own conditional formatting rule based on a formula. Below you will find a few examples of my favorite Excel conditional formats for dates.
How to highlight weekends in Excel
Regrettably, Microsoft Excel does not have a built-in calendar similar to Outlook's. Well, let's see how you can create your own automated calendar with quite little effort.
When designing your Excel calendar, you can use the =DATE(year,month,date) function to display the days of the week. Simply enter the year and the month's number somewhere in your spreadsheet and reference those cells in the formula. Of course, you could type the numbers directly in the formula, but this is not a very efficient approach because you would have to adjust the formula for each month.
The screenshot below demonstrates the DATE function in action. I used the formula =DATE($B$2,$B$1,B$4)
which is copied across row 5.
Tip. If you want to display only the days of the week like you see in the image above, select the cells with the formula (row 5 in our case), right-click and choose Format Cells…> Number > Custom. From the drop-down list under Type, select either dddd or ddd to show full day names or abbreviated names, respectively.
Your Excel calendar is almost done, and you only need to change the color of weekends. Naturally, you are not going to color the cells manually. We'll have Excel format the weekends automatically by creating a conditional formatting rule based on the WEEKDAY formula.
- You start by selecting your Excel calendar where you want to shade the weekends. In our case, it is the range $B$4:$AE$10. Be sure to start the selection with the 1st date column - Colum B in this example.
- On the Home tab, click Conditional Formatting menu > New Rule.
- Create a new conditional formatting rule based on a formula as explained in the above linked guide.
- In the "Format values where this formula is true" box, enter the following WEEKDAY formula that will determine which cells are Saturdays and Sundays:
=WEEKDAY(B$5,2)>5
- Click the Format… button and set up your custom format by switching between the Font, Border and Fill tabs and playing with different formatting options. When done, click the OK button to preview the rule.
Now, let me briefly explain the WEEKDAY(serial_number,[return_type])
formula so that you can quickly adjust it for your own spreadsheets.
- The
serial_number
parameter represents the date you are trying to find. You enter a reference to your first cell with a date, B$5 in our case. - The
[return_type]
parameter determines the week type (square brackets imply it is optional). You enter 2 as the return type for a week starting from Monday (1) through Sunday (7). You can find the full list of available return types here. - Finally, you write >5 to highlight only Saturdays (6) and Sundays (7).
The screenshot below demonstrates the result in Excel 2013 - the weekends are highlighted in the reddish colour.
Tips:
- If you have non-standard weekends in your company, e.g. Fridays and Saturdays, then you would need to tweak the formula so that it starts counting from Sunday (1) and highlight days 6 (Friday) and 7 (Saturday) -
WEEKDAY(B$5,1)>5
. - If you are creating a horizontal (landscape) calendar, use a relative column (without $) and absolute row (with $) in a cell reference because you should lock the reference of the row - in the above example it is row 5, so we entered B$5. But if you are designing a calendar in vertical orientation, you should do the opposite, i.e. use an absolute column and relative row, e.g. $B5 as you can see in the screenshot below:
How to highlight holidays in Excel
To improve your Excel calendar further, you can shade public holidays as well. To do that, you will need to list the holidays you want to highlight in the same or some other spreadsheet.
For example, I've added the following holidays in column A ($A$14:$A$17). Of course, not all of them are real public holidays, but they will do for demonstration purposes : )
Again, you open Conditional Formatting > New Rule. In the case of holidays, you are going to use either MATCH or COUNTIF function:
=COUNTIF($A$14:$A$17,B$5)>0
=MATCH(B$5,$A$14:$A$17,0)
Note. If you have chosen a different color for holidays, you need to move the public holiday rule to the top of the rules list via Conditional Formatting > Manage Rules…
The following image shows the result in Excel 2013:
Conditionally format a cell when a value is changed to a date
It's not a big problem to conditionally format a cell when a date is added to that cell or any other cell in the same row as long as no other value type is allowed. In this case, you could simply use a formula to highlight non-blanks, as described in Excel conditional formulas for blanks and non-blanks. But what if those cells already have some values, e.g. text, and you want to change the background color when text is changed to a date?
The task may sound a bit intricate, but the solution is very simple.
- First off, you need to determine the format code of your date. Here are just a few examples:
- D1: dd-mmm-yy or d-mmm-yy
- D2: dd-mmm or d-mmm
- D3: mmm-yy
- D4: mm/dd/yy or m/d/yy or m/d/yy h:mm
You can find the complete list of date codes in this article.
- Select a column where you want to change the color of cells or the entire table in case you want to highlight rows.
- And now create a conditional formatting rule using a formula similar to this one:
=CELL("format",$A2)="D1"
. In the formula, A is the column with dates and D1 is the date format.If your table contains dates in 2 or more formats, then use the OR operator, e.g.
=OR(cell("format", $A2)="D1", cell("format",$A2)="D2", cell("format", $A2)="D3")
The screenshot below demonstrates the result of such conditional formatting rule for dates.
How to highlight rows based on a certain date in a certain column
Suppose, you have a large Excel spreadsheet that contains two date columns (B and C). You want to highlight every row that has a certain date, say 13-May-14, in column C.
To apply Excel conditional formatting to a certain date, you need to find its numerical value first. As you probably know, Microsoft Excel stores dates as sequential serial numbers, starting from January 1, 1900. So, 1-Jan-1900 is stored as 1, 2-Jan-1900 is stored as 2… and 13-May-14 as 41772.
To find the date's number, right-click the cell, select Format Cells > Number and choose the General format. Write down the number you see and click Cancel because you do not really want to change the date's format.
That was actually the major part of the work and now you only need to create a conditional formatting rule for the entire table with this very simple formula: =$C2=41772
. The formula implies that your table has headers and row 2 is your first row with data.
An alternative way is to use the DATEVALUE formula that converts the date to the number format is which it is stored, e.g. =$C2=DATEVALUE("5/13/2014")
Whichever formula you use, it will have the same effect:
Conditionally format dates in Excel based on the current date
As you probably know Microsoft Excel provides the TODAY()
functions for various calculations based on the current date. Here are just a few examples of how you can use it to conditionally format dates in Excel.
Example 1. Highlight dates equal to, greater than or less than today
To conditionally format cells or entire rows based on today's date, you use the TODAY function as follows:
Equal to today: =$B2=TODAY()
Greater than today: =$B2>TODAY()
Less than today: =$B2<TODAY()
The screenshot below demonstrates the above rules in action. Please note, at the moment of writing TODAY was 12-Jun-2014.
Example 2. Conditionally format dates in Excel based on several conditions
In a similar fashion, you can use the TODAY function in combination with other Excel functions to handle more complex scenarios. For example, you may want your Excel conditional formatting date formula to color the Invoice column when the Delivery Date is equal to or greater than today BUT you want the formatting to disappear when you enter the invoice number.
For this task, you would need an additional column with the following formula (where E is your Delivery column and F the Invoice column):
=IF(E2>=TODAY(),IF(F2="", 1, 0), 0)
If the delivery date is greater than or equal to the current date and there is no number in the Invoice column, the formula returns 1, otherwise it's 0.
After that you create a simple conditional formatting rule for the Invoice column with the formula =$G2=1
where G is your additional column. Of course, you will be able to hide this column later.
Example 3. Highlight upcoming dates and delays
Suppose you have a project schedule in Excel that lists tasks, their start dates and durations. What you want is to have the end date for each task calculated automatically. An additional challenge is that the formula should also consider the weekends. For example, if the starting date is 13-Jun-2014 and the number of days of work (Duration) is 2, the ending date should come as 17-Jun-2014, because 14-Jun and 15-Jun are Saturday and Sunday.
To do this, we will use the WORKDAY.INTL(start_date,days,[weekend],[holidays])
function, more precisely =WORKDAY.INTL(B2,C2,1)
.
In the formula, we enter 1 as the 3rd parameter since it indicates Saturday and Sunday as holidays. You can use another value if your weekends are different, say, Fri and Sat. The full list of the weekend values is available here. Optionally, you can also use the 4th parameter [holidays], which is a set of dates (range of cells) that should be excluded from the working day calendar.
And finally, you may want to highlight rows depending on how far away the deadline is. For example, the conditional formatting rules based on the following 2 formulas highlight upcoming and recent end dates, respectively:
=AND($D2-TODAY()>=0,$D2-TODAY()<=7)
- highlight all rows where the End Date (column D) is within the next 7 days. This formula is really handy when it comes to tracking upcoming expiration dates or payments.=AND(TODAY()-$D2>=0,TODAY()-$D2<=7)
- highlight all rows where the End Date (column D) is within the last 7 days. You can use this formula to track the latest overdue payments and other delays.
Here are a few more formula examples that can be applied to the table above:
=$D2<TODAY()
- highlights all passed dates (i.e. dates less than the current date). Can be used to format expired subscriptions, overdue payments etc.
=$D2>TODAY()
- highlights all future dates (i.e. dates greater than the current date). You can use it to highlight upcoming events.
Of course, there can be infinite variations of the above formulas, depending on your particular task. For instance:
=$D2-TODAY()>=6
- highlights dates that occur in 6 or more days.
=$D2=TODAY()-14
- highlights dates occurring exactly 2 weeks ago.
How to highlight dates within a date range
If you have a long list of dates in your worksheet, you may also want to highlight the cells or rows that fall within a certain date range, i.e. highlight all dates that are between two given dates.
You can fulfil this task using the TODAY() function again. You will just have to construct a little bit more elaborate formulas as demonstrated in the examples below.
Formulas to highlight past dates
- More than 30 days ago:
=TODAY()-$A2>30
- From 30 to 15 days ago, inclusive:
=AND(TODAY()-$A2>=15, TODAY()-$A2<=30)
- Less than 15 days ago:
=AND(TODAY()-$A2>=1, TODAY()-$A2<15)
The current date and any future dates are not colored.
Formulas to highlight future dates
- Will occur in more than 30 days from now:
=$A2-TODAY()>30
- In 30 to 15 days, inclusive:
=AND($A2-TODAY()>=15, $A2-TODAY()<=30)
- In less than 15 days:
=AND($A2-TODAY()>=1, $A2-TODAY()<15)
The current date and any past dates are not colored.
How to shade gaps and time intervals
In this last example, we are going to utilize yet another Excel date function - DATEDIF(start_date, end_date, interval)
. This function calculates the difference between two dates based on the specified interval. It differs from all other functions we've discussed in this tutorial in the way that it lets you ignore months or years and calculate the difference only between days or months, whichever you choose.
Don't see how this could work for you? Think about it in another way… Suppose you have a list of birthdays of your family members and friends. Would you like to know how many days there are until their next birthday? Moreover, how many days exactly are left until your wedding anniversary and other events you wouldn't want to miss? Easily!
The formula you need is this (where A is your Date column):
=DATEDIF(TODAY(), DATE((YEAR(TODAY())+1), MONTH($A2), DAY($A2)), "yd")
The "yd" interval type at the end of the formula is used to ignore years and calculate the difference between the days only. For the full list of available interval types, look here.
Tip. If you happen to forget or misplace that complex formula, you can use this simple one instead: =365-DATEDIF($A2,TODAY(),"yd")
. It produces exactly the same results, just remember to replace 365 with 366 in leap years : )
And now let's create an Excel conditional formatting rule to shade different gaps in different colors. In this case, it makes more sense to utilize Excel Color Scales rather than create a separate rule for each period.
The screenshot below demonstrates the result in Excel - a gradient 3-color scale with tints from green to red through yellow.
"Days Until Next Birthday" Excel Web App
We have created this Excel Web App to show you the above formula in action. Just enter your events in 1st column and change the corresponding dates in the 2nd column to experiment with the result.
If you are curious to know how to create such interactive Excel spreadsheets, check out this article on how to make web-based Excel spreadsheets.
Hopefully, at least one of the Excel conditional formats for dates discussed in this article has proven useful to you. If you are looking for a solution to some different task, you are most welcome to post a comment. Thank you for reading!
1239 comments
Hi
Thanks for the very helpful information you publish. I've been trying to work out how to do a specific task in XL2013 and seem to keep mucking it up. please help me
I have a mix of dates spread across many rows and columns. Based on the =today() I what to format as follows
any date from today to 36 months ago to be green
any date from 36 months ago to 60 months ago to be yellow
any date greater than 60 moths ago to be red.
i keep getting errors and not all colours showing
I also have a problem with all empty cells being coloured and i would like them to stay white.
Can you please help me
Thanks in advance
Kevin
Hello Kevin,
I don't know a way to create a rule that will work based on months, since the number of days in each month varies.
Alternatively, you can create the rules based on the number of days, like these:
Green (from today to 36 days ago): =AND(TODAY()-$A2>=0, TODAY()-$A2<=36)
Yellow (from 37 to 60 days ago): =AND(TODAY()-$A2>=37, TODAY()-$A2<=60)
Red (more than 61 days ago): =$A2-TODAY()>=61
I don't think this has been answered here.
What if you want a range of cell each with a range of different dates yet you want them all follow the same rules regarding their change in colour leading up to the date specific related to each individual specific cell?
So one cell may have a date of 1/1/15 and another may have a date 20/1/15 they may turn different colours as you get closer to the date each time you open up the spreadsheet, but the earlier date will change colour sooner than the later one.
Hello Oliver,
You can achieve this by creating a few rules with different colors for your dates. For example:
Yellow (due in 1 to 20 days): =AND($A2-TODAY()>0,$A2-TODAY()<=20)
Red (due in 21 to 40 days): =AND($A2-TODAY()>20,$A2-TODAY()<=40)
And so on.
Hello Jill,
If the expiry date is calculated based on the current date, you can write the formulas using the Today() function:
Red:=$A2<TODAY()
Yellow (expires in 1 to 30 days): =AND($A2-TODAY()>0,$A2-TODAY()<=30)
or
Yellow (expires exactly in 30 days): =$A2-TODAY=30
Green (expires in 30 to 60 days): =AND($A2-TODAY()>30,$A2-TODAY()<=60)
or
Green (expires exactly in 60 days): =$A2-TODAY=60
I am creating a matrix to track training tickets. I need the matrix to tell me when tickets will expire,(expired, 30,60) I will then need to add the red color to the expired tickets, Yellow to tickets that will expire in 30 days, and Green for tickets that will expire in 60 days.
Can you help out.
Good morning,
My sheet allows us to ensure steps are completed in a allotted amount of time. I have set-up a template to track each inspection for easy viewing for our boss.
We input the date when the inspection begins and then the other dates are auto-populted by a simple formula I put into the cells.
I would like to change the color of the auto-populated cells to yellow, if the phase is being worked within the time constraints and red if the items have not been completed within the time constraints. Then once it is completed, we type complete in another cell, in a different row, and I would like to change the cell with the date to green based off the cell with the wording. (I hope all of that made sense)
What is the best way to change the colors.
The first phase starts 28 days before the inspection and needs to be completed 21 days before the inspection. The second step starts 21 days before the inspection and ends 7days before the inspection, so on and so one.
The dates are in row 5 and the information that will state completed is in row 9.
Any help would be greatly appreciated.
Hi Svetlana, Can you please help me?
I have 2 columns (B&D) that have dates in them and I want column D to turn green if column B is column D. I got the red condition code set up correctly but the green condition code (=B8<=D8) works to a point. If column B does not have any data in it, it still turns column D green. How do I fix this so if column B is blank column D will not highlight? Thank you!
Jeff
Never mind I found the answer. Here is the formula I used:
=$B2>DATEVALUE("1/1/1990")
Hi I'm wondering how can I format an excel that cell should be highlighted if it expired. But expiration will be automatically recognized every year.
I have here the situation..
Date hired is May 26, 2008. under this date is different topics. Each topic should be reviewed every year based on their month and day anniversary.
May 26, so I should be reminded that this person will be needing to review topics for this year on or before may 26. Condition: Year of entry to cell should be same year and within the year if not highlight will stay and highlight will effect if it's passdue or overdue like 2014 now but year typed is 2015. Thank You.
Hello
I coulod really use your help!
I'm migrating data from one excel spreadsheet to another and have a problem with the dates.
In one of the files, the date column only has the year, the other file has a complete date with the format dd-mm-yyyy.
I need the cells that only have the year to have the same format and since there is no information on the month and year, these would show as zero.
i.e.
00-00-2014
Do you know if this is possible and can you help?
Thank you!!
I could really use some help. I'm sure the answer is simple but i cant figure it out. I am working on a billing tracker for 6 month contracts. I dont know how to get the day to change in the date so it corresponds with the monthly billing. So contract start date is 9/15/2014. Billing date is the 5th, 10, 15th or 25th of each month. they pick. I have the drop down menu set up so i can select the date they choose but i need it to show that the first billing date is 09/25/2014 and then in the next column to show 10/25/2014. I can only get it to copy the start date and show that x months out but i cant seem to see how get the day to change according to the bill date. Thank you for the help!
Thanks for that Svetlana.
I have 300+ operative all of whom have had training for various courses and all of which expire at different times so I require something to help track when they are close to expiring and once they are they have expired.
The forumla I had used was:
=$B$2-45<TODAY() To change to orange 45 days before certificate had expired
=$B$2<TODAY() To change to red once certificate had expired
Thanks for any help in advanced I use excel regularly to create tables and charts but am really not familiar with formulas.
Hello Robert,
The problem proves to be in cell references. Your formulas are correct, just use $B2 instead of $B$2 (absolute column and relative row references) so that Excel can correctly apply the rules to all cells.
You can find more information about cell references in conditional formatting rules in this article:
Absolute and relative cell references in Excel conditional formatting
I have got a vast spreadsheet giving various dates of when peoples certificates are due to expire,I have got two formulas I wish to use one notifying me 45 days before the expiry date given and then another one once the date has been passed. I am able to get this to work for an individual cell but I am then unable to transfer this across the rest of the cells without doing them all individually. I have tried to use format painter but that does not carry over the conditional formatting.
Hello Robert,
If you want your conditional formatting rules to get applied to the entire column, e.g. highlight all the dates in column A that meet the conditions, then select the range of cells you want to color, say A2:A100 and re-write your formulas for the first of the celected cells using absolute column and reletive row references, e.g. $A2.
If you want something different, please give me more details about your data structure and the formulas, and I will try to help.
Great article! I really suggest if the reader is unfamiliar with conditional formatting, start with the beginning examples and work your way down to functional solutions for more complicated problems. Thank you!
Thank you for your kind words, Chris! I am happy to know my article was helpful.
how can i create in excel that make expire date for one week in red mark
Hello shoukath,
For me to be able to suggest a proper formula, please provide more details about what is deemed an expired date.
If it is simply more than 7 days back from now, then you can use this formula (where A2 is the first cell with data):
=TODAY()-$A2>7
If you want something different, please clarify.
I have some dates in column B. In column A, I would like 15 days before one text will show like "LC need". Is it possible by a conditional formula? Pls help me.
I have a set of dates... I need to change the date color if today - 2 days one color, and 2 days back to 5 days back one color, 5 days back to 7 days back one color, more than 7 days back one color, How its possible to do? Please
Hello Naina,
You can do this by creating a set of conditional formatting rules with the following formulas (where $A2 is the first cell with data):
Today to 2 day back:=AND(TODAY()-$A2>=0,TODAY()-$A2<=2)
3 days back to 5 days back: =AND(TODAY()-$A2>=3,TODAY()-$A2<=5)
6 days back to 7 days back: =AND(TODAY()-$A2>=6,TODAY()-$A2<=7)
more than 7 days back: =TODAY()-$A2>7
It's Working good, Thank you very much
Hi need help how to resolve this formula... it always end in #VALUE! error because of N/A and A word... Thanks!
=IF(I42=3,I42*3*12,IF(I42="N/A",0,IF(I42="A",0))))
Hi
I have been trying out the formulas but i just cant get what i wanted. im trying to keep track on deliveries and need a warning before the actual delivery date.
Cell A1 = todays date
i want it to be:
orange : 15 days before date(or any number of days i can modify to)
yellow : on the day itself till
red: after 15 days onwards
thanks.
Hi Joey,
Select the dates you want to format, say in column B, and try creating the rules with the following formulas, where B2 is the top-left cell of the selected range:
Yellow: =AND($B2>=$A$1, ($B2-$A$1)<15)
Red: =$B2-$A$1>=15
Orange: =$A$1-$B2=15 - exactly 15 days before the date
or
Orange: =AND($B2<$A$1, ($A$1-$B2) <=15) - from 1 to 15 days before the date
wonderful. perfectly working. thanks alot!
Hi
I have a date in Cell c2, I would like cell g2 to have a red icon appear when todays date is 49 years and 6 months after the date in c2.
I would also like cell h2 to have a red icon when todays date is 59 years and 6months after the date in cell c2
Hello
I want to highlight my cells in different colours depending on the date. For example (and I'm using British dates sorry) if I have cell 1A with a date 17/10/2014 I would like it to become yellow three months after the date and red six months after the date.
Thankyou very much
Hello Finlay,
Sorry, I don't know a way to calculate exactly 3 or 6 months because the number of days varies from 28 in Feb to 31, say, in Dec.
Instead, you can highlight dates based on the number of days after a certain date. For example:
Red (after 180 days): =TODAY()-$A2>=180 (it should come 1st in the rules list)
Yellow (after 60 days):=TODAY()-$A2>=60
Hello,
I am trying to colour code for various dates and can't seem to get the formulas to work. The intent it to show any date that is equal to today (or in the past) as green, dates within the next 30 days as yellow, dates 31-60 days as orange, and anything 61 days or longer as red. I have tried creating a new spreadsheet as well as leveraging an existing one, and can't get the formulas you show above to work as a test. Any advice and assistance would be greatly appreciated.
Hello Cody,
Try creating the rules with the following formulas (assuming that your dates are in column A and row 2 is the first row with data):
Green: =$A2<=TODAY()
Yellow: =AND($A2>=TODAY()+1,$A2<=TODAY()+30)
Orange: =AND($A2>=TODAY()+31,$A2<=TODAY()+60)
Red: =$A2>=TODAY()+61
1) How do you copy an upcoming date to a different cell from a series list of 26 Dates ie starting from a set date (28/7/2015 – 30/6/2015, cells B2:B27) and showing the next highlighted upcoming date in the series list and only that date (ie every 14 days from starting date (say 14/7/2015 showing a highlighted 28/7/2015 in cell A3) then show the following next date in the series list (12/8/2015 again in A3) when the preceding next date in the series list is reached (28/7/2015 in A3).