Build a Maintenance Schedule in Excel With Due Dates
By ExcelReady TeamUpdated 5 min read
The short answer
To build a maintenance schedule in Excel, list each asset with its last service date and service interval in months. Calculate the next due date with =EDATE(B2,C2), then flag it with =IF(D2<TODAY(),"Overdue",IF(D2-TODAY()<=14,"Due soon","OK")). Add conditional formatting so overdue rows turn red, and update the last service date after each job.
Key takeaways
- Keep one row per asset with the last service date and the interval in months.
- =EDATE(B2,C2) adds the interval in months and handles month lengths for you.
- IF with TODAY() turns due dates into Overdue, Due soon and OK labels that update every day.
- A conditional formatting rule such as =$D2<TODAY() highlights overdue rows automatically.
- WORKDAY can move a due date that falls on a weekend to the next working day.
On this page+
A maintenance schedule in Excel tells you what needs servicing and when, so nothing is missed. You list each asset with its last service date and how often it needs servicing, and three formulas do the rest: EDATE for the next due date, IF with TODAY for the status, and conditional formatting to make overdue jobs stand out. This guide builds the schedule step by step for anyone who looks after equipment, vehicles or a building.
What a maintenance schedule needs#
A useful schedule has one row per asset and a few columns that drive the formulas. Here is the layout used in this guide:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Asset | Last service | Interval (months) | Next due | Status |
| 2 | Forklift | 20 Apr 2026 | 6 | ||
| 3 | Air compressor | 14 May 2026 | 6 | ||
| 4 | HVAC filters | 15 Aug 2026 | 3 | ||
| 5 | Generator | 31 Aug 2026 | 3 | ||
| 6 | Fire extinguishers | 1 Dec 2025 | 12 | ||
| 7 | Delivery van | 10 Sep 2026 | 6 |
Enter the last service dates as real dates, not text. A quick check: a real date lines up on the right of the cell. You can add more columns later, such as location, owner or notes, without changing the formulas.
How to calculate the next due date with EDATE#
EDATE adds a number of months to a date, which matches how most service intervals are written. In D2, type:
=EDATE(B2,C2)Format the result as a date (Home > Number Format > Short Date), then fill down (Windows: Ctrl+D; Mac: ⌘D). The results:
| Asset | Last service | Interval | Next due |
|---|---|---|---|
| Forklift | 20 Apr 2026 | 6 | 20 Oct 2026 |
| Air compressor | 14 May 2026 | 6 | 14 Nov 2026 |
| HVAC filters | 15 Aug 2026 | 3 | 15 Nov 2026 |
| Generator | 31 Aug 2026 | 3 | 30 Nov 2026 |
| Fire extinguishers | 1 Dec 2025 | 12 | 1 Dec 2026 |
| Delivery van | 10 Sep 2026 | 6 | 10 Mar 2027 |
Notice the generator. There is no 31 November, so EDATE returns the last day of the month, 30 November. Adding 90 days by hand would drift away from the calendar month. The EDATE function guide and the guide to EDATE and EOMONTH cover more examples.
If an interval is in days or weeks instead, add them directly: =B2+90 for 90 days, or =B2+7*C2 for C2 weeks.
How to flag overdue jobs with IF and TODAY#
TODAY() returns the current date, so you can compare each due date with today and label it. In E2, type:
=IF(D2<TODAY(),"Overdue",IF(D2-TODAY()<=14,"Due soon","OK"))It reads as: if the due date is before today, show Overdue. Otherwise, if it is 14 days away or less, show Due soon. Otherwise, show OK. If you checked the schedule on 3 November 2026, the results would be:
| Asset | Next due | Days left | Status |
|---|---|---|---|
| Forklift | 20 Oct 2026 | -14 | Overdue |
| Air compressor | 14 Nov 2026 | 11 | Due soon |
| HVAC filters | 15 Nov 2026 | 12 | Due soon |
| Generator | 30 Nov 2026 | 27 | OK |
| Fire extinguishers | 1 Dec 2026 | 28 | OK |
| Delivery van | 10 Mar 2027 | 127 | OK |
The Days left column is simply =D2-TODAY(), formatted as a number. Because TODAY() updates every time the file opens, the status changes by itself. Change 14 to suit your warning period. The IF function guide explains nested IFs, and the TODAY function guide covers how TODAY recalculates.
How to highlight overdue rows with conditional formatting#
Conditional formatting colours the rows that need action, so you see them at a glance. To shade the whole row red when it is overdue:
- Select A2:E7.
- Go to Home > Conditional Formatting > New Rule.
- Choose Use a formula to determine which cells to format.
- Enter
=$D2<TODAY(). - Click Format, pick a light red fill and click OK twice.
The $ before D keeps every cell in the row looking at the due date column. Add a second rule, =AND($D2>=TODAY(),$D2-TODAY()<=14), with an amber fill for jobs due soon. The guide to highlighting overdue dates has more rule ideas.
How to move due dates off weekends#
If a due date lands on a Saturday or Sunday, WORKDAY can move it to the next working day:
=WORKDAY(EDATE(B2,C2)-1,1)Going back one day and then forward one working day leaves weekday dates unchanged and moves weekend dates to Monday. The air compressor's due date, Saturday 14 November 2026, becomes Monday 16 November. Add a range of public holidays as a third argument to skip those too. See the due date formula guide for other ways to count working days.
How to keep the schedule up to date#
The schedule works only if the last service dates stay current. After each job:
- Type the new service date in column B. The next due date and status update by themselves.
- Sort by Next due, oldest first, so the next jobs are always at the top.
- Keep a separate log sheet with one row per completed job (date, asset, work done, cost) if you need a history.
For usage-based servicing, such as every 500 machine hours or 10,000 miles, add columns for the last reading, the current reading and the interval. Then =IF(current-last>=interval,"Due","OK") flags it. The same structure also works for certificates and contracts, as shown in the expiry date tracker.
Practise it#
The schedule rests on three skills: adding months, writing IF tests and building formatting rules. Practise EDATE, EOMONTH and WEEKDAY in a live spreadsheet, then practise the IF function and conditional formatting. Each step is checked instantly. Or try the exercise on this page: it uses a fixed check date instead of TODAY(), so the answer stays the same.
Try it yourself
This is a live spreadsheet. Type the formula in the green cell and press Enter.
The schedule is checked on the date in B8. In D2, use IF and EDATE to show "Overdue" if the forklift's next service date (last service B2 plus C2 months) is before B8, otherwise "OK".
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Status | ||||
| 2 | |||||
| 3 | |||||
| 4 | |||||
| 5 | |||||
| 6 | |||||
| 7 | |||||
| 8 | |||||
| 9 | |||||
| 10 | |||||
| 11 |
Tip: EDATE(B2,C2) gives the next due date. Compare it with $B$8 inside IF, then give the two labels in double quotes.
Practise this in a lesson
Frequently asked questions
How do I create a maintenance schedule in Excel?
List each asset in a row with its last service date and the service interval in months. Use =EDATE(B2,C2) for the next due date, an IF formula with TODAY() for the status, and conditional formatting to highlight overdue rows.
How do I calculate the next service date in Excel?
If the interval is in months, use =EDATE(last_date, months), such as =EDATE(B2,6). If the interval is in days, add the days: =B2+90. Format the result as a date.
How do I highlight overdue maintenance in Excel?
Select the rows, go to Home > Conditional Formatting > New Rule, choose Use a formula, and enter =$D2<TODAY() where column D holds the due dates. Pick a red fill and click OK.
Can Excel send maintenance reminders?
Excel can't send reminders on its own. The schedule shows what is due when you open it. For alerts, open the file on a set day each week, or sort by due date so the next jobs are always at the top.
How do I schedule maintenance by hours or miles instead of dates?
Add columns for the reading at the last service, the current reading and the interval. Then flag it with a formula such as =IF(D2-B2>=C2,"Due","OK").