Project end dates in Excel with WORKDAY.INTL — and the start-date gotcha that shifts every schedule by a day
"Three days of work, starting Friday — so we're done Monday."
If Monday is a public holiday, you are not done Monday. Small contractors, freelancers and anyone quoting turnaround times run into this all the time. Excel has two functions built for it, and one detail that trips almost everyone up.
The two functions
| You want to… | Use |
|---|---|
| Get the date N working days after a start date | WORKDAY.INTL(start, days, [weekend], [holidays]) |
| Count the working days between two dates | NETWORKDAYS.INTL(start, end, [weekend], [holidays]) |
The .INTL versions let you choose which days are the weekend. Google Sheets has the same functions with the same names.
Setting the weekend
The third argument controls the weekend. According to Microsoft's documentation:
1(or omitted): Saturday and Sunday11: Sunday only17: Saturday only- A 7-character string, Monday first, where
1means a day off:"0000011"is Saturday + Sunday,"0000001"is Sunday only
Holidays and company days off
The fourth argument takes a range of dates to skip. Keep one small sheet called Holidays with:
- The public holidays for this year and next year
- Your own closures (summer break, year-end shutdown)
Point every formula at that range. When the dates change, you update one list instead of every formula.
The gotcha: WORKDAY.INTL doesn't count the start date
WORKDAY.INTL counts from the day after the start date. Microsoft's documentation notes that a day count of 0 simply returns the start date.
On site, people usually count the start day as day 1. Plug the start date straight in and every finish date comes out one working day late. The fix is to count from the day before:
=WORKDAY.INTL(start-1, days, 1, Holidays)
Example: start Friday October 9, 2026, 3 working days, weekends off, Monday October 12 listed as a holiday.
- Day 1: Fri Oct 9
- Sat Oct 10, Sun Oct 11, Mon Oct 12 (holiday): skipped
- Day 2: Tue Oct 13
- Day 3: Wed Oct 14 ← finish date
A side effect of start-1: if the start date itself is a day off, the next working day becomes day 1, which is usually what you want.
Counting working days in a range
NETWORKDAYS.INTL counts both the start and end dates. For Oct 9 to Oct 14 above, with the same weekend and holiday, it returns 3, which matches the finish-date formula.
Microsoft's own example: January 1 to January 31, 2006, with a Saturday–Sunday weekend, returns 22 (31 days minus 9 weekend days).
Common mistakes
- Passing the start date directly to WORKDAY — every date is off by one if you count the start day as day 1. Use
start-1. - Holiday dates stored as text — "Oct 12" typed as text won't be skipped. Check the cells are real dates.
- Holiday list not updated for next year — jobs that cross New Year will run straight through the holiday.
Quick checklist
- ☐ Durations are in working days, start day = day 1
- ☐ Formula uses
start-1 - ☐ Weekend code matches how your crew actually works
- ☐ Holiday list covers this year and next, including company closures
- ☐ Weather delays and contract terms handled separately, as agreed with the client
References
- Microsoft Support, "WORKDAY.INTL function"
- Microsoft Support, "NETWORKDAYS.INTL function"
This article was written with the help of AI. The function behavior is based on Microsoft's documentation, and the worked example was counted by hand.