The syntax of both functions
=NETWORKDAYS(start_date, end_date, [holidays])returns a number: the working days from start to end, both included. Monday to Friday of one week is 5.=WORKDAY(start_date, days, [holidays])returns a date: the day that lies days working days after the start.WORKDAY(Monday, 5)is the next Monday.- holidays is optional in both: a range of real dates to skip, such as
$B$10:$B$12.
WORKDAY returns a serial number, so format the cell as a date. A negative number of days counts backwards: =WORKDAY(deadline,-3) is the latest day to start a three-day task.
Worked example: six jobs and three closure days
Columns B and E are dates, column C is the SLA in working days. D and F are formulas, and rows 14 to 19 take job J-102 apart. The holiday list is in B10:B12.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Job | Received | SLA (workdays) | Due (WORKDAY) | Completed | Workdays taken |
| 2 | J-101 | 23 Mar 2026 | 5 | Mon 30 Mar | 27 Mar 2026 | 5 |
| 3 | J-102 | 01 Apr 2026 | 3 | Wed 8 Apr | 09 Apr 2026 | 5 |
| 4 | J-103 | 02 Apr 2026 | 5 | Mon 13 Apr | 10 Apr 2026 | 5 |
| 5 | J-104 | 13 Apr 2026 | 10 | Mon 27 Apr | 28 Apr 2026 | 12 |
| 6 | J-105 | 19 May 2026 | 5 | Wed 27 May | 27 May 2026 | 6 |
| 7 | J-106 | 22 May 2026 | 2 | Wed 27 May | 29 May 2026 | 5 |
| 8 | ||||||
| 9 | Closure days | Date | ||||
| 10 | Good Friday | 03 Apr 2026 | ||||
| 11 | Easter Monday | 06 Apr 2026 | ||||
| 12 | Company holiday | 25 May 2026 | ||||
| 13 | ||||||
| 14 | J-102: calendar days, E3 − B3 | 8 | ||||
| 15 | J-102: NETWORKDAYS without the holiday list | 7 | ||||
| 16 | J-102: NETWORKDAYS with the holiday list | 5 | ||||
| 17 | J-102: Monday-to-Saturday days, NETWORKDAYS.INTL code 11 | 6 | ||||
| 18 | J-102: due date if you forget the holidays | Mon 6 Apr | ||||
| 19 | Jobs late (workdays taken > SLA + 1) | 3 | ||||
- D3
=TEXT(WORKDAY(B3,C3,$B$10:$B$12),"ddd d mmm")Due date, holidays skipped - F3
=NETWORKDAYS(B3,E3,$B$10:$B$12)Working days, both ends counted - F17
=NETWORKDAYS.INTL(B3,E3,11,$B$10:$B$12)Sunday-only weekend - F19
=SUMPRODUCT(--(F2:F7>C2:C7+1))Late jobs: more than SLA + 1
The dates follow the 2026 calendar, in which Good Friday is 3 April and Easter Monday 6 April. Use your own country's or company's closure days.
Count working days with NETWORKDAYS
Job J-102 was received on Wed 1 Apr 2026 and completed on Thu 9 Apr. Plain subtraction, =E3-B3, gives 8 calendar days. =NETWORKDAYS(B3,E3) gives 7, because the weekend of 4 and 5 April is skipped and both end days count. Add the holiday list, =NETWORKDAYS(B3,E3,$B$10:$B$12), and Good Friday and Easter Monday drop out too: 5 working days. Only holidays that fall inside the period change the result, so one list for the whole year works for every row.
Find a due date with WORKDAY
The SLA in column C is a number of working days. =WORKDAY(B2,C2,$B$10:$B$12) turns it into the date the job is due. For J-102, the three working days after Wed 1 Apr are Thu 2 Apr, Tue 7 Apr and Wed 8 Apr, so the job is due on Wed 8 Apr. Without the holiday list Excel counts Good Friday as a working day and returns Mon 6 Apr, which is itself a holiday. The same trap catches J-105: five working days after Tue 19 May skip the company holiday on Mon 25 May and land on Wed 27 May.
In the grid, column D wraps the result in TEXT(…,"ddd d mmm") so that the weekday is visible. In your own sheet, =WORKDAY(B2,C2,$B$10:$B$12) with a date format does the same job and keeps a real date you can calculate with.
The off-by-one difference between the two
Because NETWORKDAYS counts the start day and WORKDAY does not, the two are not exact opposites. A job received on a working day and finished exactly on its WORKDAY due date has taken SLA + 1 working days by NETWORKDAYS. J-105 shows it: SLA 5, due and completed on Wed 27 May, NETWORKDAYS 6, on time. So when every start date is a working day, as here, the late test is workdays taken > SLA + 1. Simpler and always safe is to compare the dates directly: =IF(E2>WORKDAY(B2,C2,$B$10:$B$12),"Late","On time"). In the example 3 of the 6 jobs are late: J-102, J-104 and J-106.
If you want the working days elapsed after the start day, subtract 1: =NETWORKDAYS(B2,E2,$B$10:$B$12)-1.
Other weekends: NETWORKDAYS.INTL and WORKDAY.INTL
Not every team works Monday to Friday. The .INTL versions take a weekend argument between the dates and the holidays: 1 is Saturday and Sunday (the default), 7 Friday and Saturday, 11 Sunday only and 17 Saturday only. You can also pass a seven-character mask from Monday to Sunday in which 1 means a day off, so "0000011" is the normal weekend. For a field crew that also works on Saturdays, =NETWORKDAYS.INTL(B3,E3,11,$B$10:$B$12) counts J-102 as 6 days, because Saturday 4 April now counts.
Keep the holiday list in cells
Put the closure days in one column of real dates and refer to it with an absolute range, $B$10:$B$12, or a named range such as Holidays. Every formula then uses the same list, and next year you change the dates in one place. Holidays stored as text instead of real dates can give wrong results or an error, so check them with =ISNUMBER(B10). For the month-end and renewal dates that often go with these deadlines, see EDATE and EOMONTH in the labs below, and for adding up amounts by date range see the SUMIFS examples.
Common mistakes
- Forgetting the holiday list. Without it, WORKDAY can return a public holiday as the due date (Mon 6 Apr for J-102) and NETWORKDAYS counts days nobody worked.
- Relative holiday ranges.
B10:B12becomesB11:B13when you fill the formula down. Lock it with $ or use a named range. - Treating the two functions as exact opposites. NETWORKDAYS counts the start day, WORKDAY does not. Compare dates, or allow for SLA + 1.
- Subtracting dates to get working days.
=E3-B3counts calendar days, weekends and holidays included. - Holidays stored as text. A date typed as text is not a date. Check with ISNUMBER and convert with DATEVALUE or DATE.
- The wrong weekend code. Code 1 is the normal Saturday and Sunday weekend. Sunday only is 11, not 1 or 7.
Frequently asked questions
Does NETWORKDAYS include the start date?
Yes. NETWORKDAYS counts both the start and the end date if they are working days, so Monday to Friday of the same week returns 5. Subtract 1 if you want the working days elapsed after the start.
What is the difference between WORKDAY and NETWORKDAYS?
NETWORKDAYS returns the number of working days between two dates. WORKDAY returns the date that is a given number of working days after a start date, or before it with a negative number. Both skip weekends and an optional list of holidays.
How do I exclude holidays in NETWORKDAYS?
List the holiday dates in a range of cells and pass it as the last argument, for example =NETWORKDAYS(B2,E2,$B$10:$B$12). Lock the range with $ so that it does not move when you copy the formula.
How do I count working days with a six-day week?
Use NETWORKDAYS.INTL with a weekend code. Code 11 makes only Sunday a day off, so =NETWORKDAYS.INTL(start,end,11,holidays) counts Monday to Saturday.