NETWORKDAYS in Excel: Calculate Working Days Excluding Weekends & Holidays

NETWORKDAYS in Excel feature image for tutorial blog
NETWORKDAYS counts the working days between two dates, automatically skipping weekends and subtracting any public holidays you provide. It is the essential function for project timelines, payroll calculations, SLA monitoring, and monthly capacity planning. This guide covers both NETWORKDAYS and NETWORKDAYS.INTL with six practical examples — from basic counts through custom weekend definitions for global businesses.

Need to know how many working days are left before a project deadline? Want to calculate an employee's billable days excluding public holidays? The NETWORKDAYS function does both in a single formula — it counts the working days between two dates, automatically skipping weekends, and can subtract any custom holiday list you provide. Its companion, NETWORKDAYS.INTL, extends this with custom weekend definitions for global businesses where the working week does not fall on Monday to Friday. This guide covers both functions with six practical examples.

Availability: Both NETWORKDAYS and NETWORKDAYS.INTL are available in all Excel versions from Excel 2007 onwards, including Microsoft 365, Excel 2024, 2021, 2019, 2016, and 2013. NETWORKDAYS.INTL was introduced in Excel 2010.

NETWORKDAYS Syntax

=NETWORKDAYS(start_date, end_date, [holidays])
ArgumentRequired?What it means
start_date Required The first date of the period. Must be a valid Excel date — use a cell reference, DATE(), or TODAY(). NETWORKDAYS includes this date in the count if it is a working day.
end_date Required The last date of the period. Also included in the count if it falls on a working day. If end_date is earlier than start_date, NETWORKDAYS returns a negative number.
holidays Optional A range of dates (e.g. $F$2:$F$20) or an array constant of dates to exclude from the working day count. Lock this range with $ signs when copying the formula down. Holidays that fall on weekends are ignored — they are already excluded.
Important — both dates are included: NETWORKDAYS counts the start date and the end date as working days if they are not weekends or holidays. If both dates are the same working day, the result is 1 — not 0.

Example 1: Count Working Days Between Two Dates

The simplest use — how many working days are there between a start date and an end date? NETWORKDAYS handles all the Saturday/Sunday skipping automatically.

1
Count working days for a set of project phases
#
A — Phase
B — Start
C — End
D — Working days
2
Discovery
03-Mar-2026
13-Mar-2026
9
3
Design
16-Mar-2026
27-Mar-2026
10
4
Build
30-Mar-2026
24-Apr-2026
20
Formula in D2 — no holidays argument, weekends skipped automatically: =NETWORKDAYS(B2, C2) Days remaining until a deadline from today: =NETWORKDAYS(TODAY(), C2) If start is after end, result is negative (useful for overdue tracking): =NETWORKDAYS(C2, TODAY()) Returns negative value if deadline has passed — days overdue
The Discovery phase (3–13 March) has 9 working days — 11 calendar days minus the 2 weekend days (Sat 7 and Sun 8 March). Both start and end date are counted when they fall on a weekday.

Example 2: Exclude Public Holidays

Add a holiday list to NETWORKDAYS and those dates are subtracted from the working day count. Store your holiday dates in a dedicated range — lock it with $ signs so it stays fixed when you copy the formula down.

2
Working days excluding public holidays stored in a holiday list
Start
End
No holidays
With holidays
F — Holidays
01-Apr-2026
30-Apr-2026
22
21
06-Apr-2026
01-May-2026
31-May-2026
21
20
04-May-2026
25-Dec-2026
Without holidays — counts all Mon-Fri days: =NETWORKDAYS(A2, B2) With holiday list in F2:F10 — lock the range so it stays fixed when copied: =NETWORKDAYS(A2, B2, $F$2:$F$10) Using a named range (cleaner and easier to maintain): =NETWORKDAYS(A2, B2, PublicHolidays)
Name your holiday range: Select the holiday date cells, go to the Name Box (left of the formula bar), and type PublicHolidays. You can then use that name in every NETWORKDAYS formula in the workbook. When the holiday list changes, update one range — every formula updates automatically.
Holidays on weekends are ignored: If a public holiday falls on a Saturday or Sunday, NETWORKDAYS does not subtract it — it was already excluded. Only holidays that fall on working days (Mon–Fri) reduce the count.

Example 3: Working Days in a Specific Month

Combine NETWORKDAYS with EOMONTH to calculate the number of working days in any given month — useful for capacity planning, payroll periods, and monthly target-setting dashboards.

3
Count working days in each month of the year
A — Month start
B — Working days
C — With holidays
01-Jan-2026
22
21
01-Feb-2026
20
20
01-Mar-2026
22
22
A2 contains the first day of the month (e.g. 01-Jan-2026). EOMONTH returns the last day of the same month (offset = 0). Working days in the month — no holidays: =NETWORKDAYS(A2, EOMONTH(A2, 0)) Working days in the month — with public holidays: =NETWORKDAYS(A2, EOMONTH(A2, 0), $F$2:$F$30) For any month in the current year — DATE builds the first day automatically: =NETWORKDAYS( DATE(YEAR(TODAY()), A2, 1), EOMONTH(DATE(YEAR(TODAY()), A2, 1), 0), $F$2:$F$30) A2 = month number 1-12

Example 4: Employee Leave and Payroll Days

NETWORKDAYS is the standard function for payroll calculations — it tells you exactly how many days an employee worked, excluding weekends and company holidays. Multiply the result by the daily rate to get the pay for any period.

4
Calculate working days and pay for a partial pay period
#
A — Employee
B — Start
C — End
D — Days worked
E — Pay (x $200/day)
2
Ana
01-Mar-2026
31-Mar-2026
22
$4,400
3
James
15-Mar-2026
31-Mar-2026
13
$2,600
Days worked (D2) — excluding weekends and public holidays: =NETWORKDAYS(B2, C2, $G$2:$G$20) Pay amount (E2) — multiply working days by daily rate: =D2 * 200 Days worked up to today (for a current period in progress): =NETWORKDAYS(B2, MIN(C2, TODAY()), $G$2:$G$20) MIN ensures the formula stops at today if the period is still running
Working hours from working days: Multiply NETWORKDAYS by daily hours to get working hours: =NETWORKDAYS(B2,C2,$G$2:$G$20) * 8 for an 8-hour day. For part-time schedules, multiply by the appropriate daily hours instead.

Example 5: NETWORKDAYS.INTL — Custom Weekend Days

NETWORKDAYS always treats Saturday and Sunday as the weekend. NETWORKDAYS.INTL adds a third argument — the weekend number — letting you define any combination of weekend days. This is essential for businesses in regions where the working week is Friday-Saturday off, or where only one day per week is a rest day.

5
Count working days with Friday-Saturday weekends (Middle East schedule)
NETWORKDAYS.INTL syntax: =NETWORKDAYS.INTL(start_date, end_date, [weekend], [holidays]) Standard Sat-Sun weekend (same as NETWORKDAYS): =NETWORKDAYS.INTL(A2, B2, 1) Friday-Saturday weekend (weekend code 7 — common in GCC countries): =NETWORKDAYS.INTL(A2, B2, 7) Sunday only as weekend (6-day working week): =NETWORKDAYS.INTL(A2, B2, 11) Custom weekend using a 7-character string (1=day off, 0=working day): Characters represent Mon,Tue,Wed,Thu,Fri,Sat,Sun Friday and Saturday off: =NETWORKDAYS.INTL(A2, B2, "0000110") With holidays: =NETWORKDAYS.INTL(A2, B2, "0000110", $G$2:$G$20)
CodeWeekend daysTypical region
1Saturday and Sunday (default)Most of Europe, Americas, Asia Pacific
2Sunday and MondaySome Middle Eastern countries
7Friday and SaturdayGCC countries (UAE, Saudi Arabia, Qatar)
11Sunday onlySix-day working week
17Saturday onlySix-day working week
"0000000"No weekend — all 7 days countCustom / special projects
String format explained: The 7-character string maps to Mon-Tue-Wed-Thu-Fri-Sat-Sun. A "1" means that day is a non-working day; a "0" means it is a working day. So "0000110" = Friday (position 5) and Saturday (position 6) are off, all other days are working days.

Example 6: SLA Tracking and Deadline Monitoring

NETWORKDAYS is widely used in customer service and operations to track SLA compliance — whether a ticket was resolved within the agreed number of working days. Combine it with TODAY() and conditional formatting to build a live overdue alert.

6
Track SLA compliance — days elapsed and overdue status
#
A — Ticket
B — Opened
C — SLA (days)
D — Days elapsed
E — Status
2
TKT-0042
24-Mar-2026
5
4
On Track
3
TKT-0039
17-Mar-2026
5
9
OVERDUE
Days elapsed since ticket opened (D2): =NETWORKDAYS(B2, TODAY(), $G$2:$G$30) - 1 Subtract 1 to count elapsed time (not including today as a completed day) SLA status — On Track or OVERDUE (E2): =IF(D2 > C2, "OVERDUE", "On Track") SLA deadline date — what date is 5 working days after opening? =WORKDAY(B2, C2, $G$2:$G$30) WORKDAY adds N working days to a start date (companion to NETWORKDAYS) Days remaining before SLA breach: =C2 - =NETWORKDAYS(B2, TODAY(), $G$2:$G$30) + 1
WORKDAY is the companion function: NETWORKDAYS counts working days between two dates. WORKDAY calculates what date falls N working days after a start date. Use NETWORKDAYS to measure elapsed time; use WORKDAY to calculate deadline dates.

Troubleshooting NETWORKDAYS Errors

#VALUE! error

One or more arguments is not a valid Excel date. Common causes: dates stored as text rather than real date values, a holiday list that contains a text cell mixed in with the dates, or a date entered with slashes that Excel is reading as division. Check each argument with =ISNUMBER(A2) — real dates return TRUE since Excel stores them as numbers internally.

Result is 1 when you expected 0

NETWORKDAYS always counts the start date as day 1 if it is a working day. If you are measuring elapsed time from an opening date, subtract 1 from the result: =NETWORKDAYS(B2,TODAY())-1.

Result is negative

The end_date is earlier than the start_date. This is intentional behaviour — a negative result tells you that the end date is before the start. Swap the arguments or use ABS() to convert to a positive number: =ABS(NETWORKDAYS(A2,B2)).

Holidays are not being excluded

Most commonly caused by the holiday range not being locked. When you copy the formula down, a relative reference like F2:F10 shifts to F3:F11 and misses some holidays. Always use absolute references: $F$2:$F$10. Also verify the holiday dates are stored as real Excel dates, not as text.

NETWORKDAYS.INTL string errors: The weekend string must be exactly 7 characters long using only "0" and "1", with at least one "0" (at least one working day). An all-ones string "1111111" or the wrong length returns a #VALUE! error.

Frequently Asked Questions

  • What does NETWORKDAYS do in Excel?+
    NETWORKDAYS calculates the number of working days between two dates, automatically excluding Saturdays and Sundays. You can also provide an optional list of holiday dates to exclude from the count. Both the start date and end date are counted as working days if they fall on a weekday. The result is a positive integer, or a negative number if the end date is before the start date.
  • What is the difference between NETWORKDAYS and NETWORKDAYS.INTL?+
    NETWORKDAYS always treats Saturday and Sunday as the non-working weekend. NETWORKDAYS.INTL adds a third argument — a weekend code or a 7-character string — that lets you define any combination of weekend days. Use NETWORKDAYS.INTL when your business operates on a non-standard working week, such as Friday-Saturday off in GCC countries, or a six-day working week with only Sunday off.
  • How do I add a holiday list to NETWORKDAYS?+
    Store your holiday dates in a column — each date in its own cell. Lock the range with dollar signs and pass it as the third argument: =NETWORKDAYS(A2, B2, $F$2:$F$20). Locking with $ signs ensures the holiday range stays fixed when you copy the formula to other rows. For the cleanest setup, define the range as a named range (e.g. "PublicHolidays") and use the name in the formula.
  • Does NETWORKDAYS include the start date and end date?+
    Yes. Both the start date and end date are included in the count if they fall on a working day. This means if you give NETWORKDAYS the same date for both arguments and it is a weekday, the result is 1 — not 0. If you need to count elapsed time from a start date (not counting the start itself), subtract 1 from the result.
  • How do I calculate the number of working days in a month?+
    Use EOMONTH to get the last day of the month automatically: =NETWORKDAYS(A2, EOMONTH(A2, 0), $F$2:$F$20) where A2 contains the first day of the month. EOMONTH(A2, 0) returns the last day of the same month as A2, so the formula covers the full month. Add the holiday range to subtract public holidays from the count.
  • What is the difference between NETWORKDAYS and WORKDAY?+
    NETWORKDAYS counts the working days between two existing dates. WORKDAY calculates a future or past date that is N working days away from a start date. They are companion functions: use NETWORKDAYS to measure how many working days have passed between two dates, and use WORKDAY to find what date falls exactly N working days in the future. Both accept the same optional holiday list.