WORKDAY Function: Calculate Project Deadlines & Delivery Dates

WORKDAY in Excel feature image for tutorial blog
WORKDAY takes a start date and a number of working days, and returns the exact deadline date — automatically skipping weekends and any holidays you provide. It is the companion to NETWORKDAYS: use NETWORKDAYS to count elapsed working days, and WORKDAY to find what date falls N working days in the future or past. This guide covers forward planning, backward planning, invoice due dates, delivery chains, WORKDAY.INTL for custom working weeks, and the workday-check formula trick.

When you need to find what date falls exactly 10 working days from today — accounting for weekends and bank holidays automatically — the WORKDAY function is the right tool. It returns a date rather than counting days, making it the natural companion to NETWORKDAYS. Use NETWORKDAYS to measure how many working days have elapsed; use WORKDAY to calculate what date falls a fixed number of working days in the future or past. This guide covers the full syntax, introduces WORKDAY.INTL for custom working weeks, and walks through six practical examples covering project deadlines, invoice due dates, delivery windows, and backward planning.

Availability: WORKDAY is available in all Excel versions from Excel 2007 onwards. WORKDAY.INTL was introduced in Excel 2010 and is available in all later versions including Microsoft 365, 2024, 2021, and 2019.

WORKDAY Syntax

=WORKDAY(start_date, days, [holidays])
ArgumentRequired?What it means
start_date Required The date to count from. WORKDAY does not count this date itself — it starts counting from the next working day. Use a cell reference, DATE(), or TODAY().
days Required The number of working days to add (positive) or subtract (negative). Weekends and holidays in the list are automatically skipped. Decimals are truncated to integers.
holidays Optional A range of dates (e.g. $H$2:$H$20) to exclude from the working day count. Lock this range with $ signs when copying the formula. Holidays that fall on weekends are skipped automatically.
WORKDAY does not count the start date: WORKDAY starts counting from the day after the start date. If start_date is Monday and days = 1, the result is Tuesday — not Monday. This is different from NETWORKDAYS, which includes the start date in its count. Format the result cell as a date (Ctrl+1) — the raw output is a date serial number.

WORKDAY vs NETWORKDAYS — Which One to Use?

NETWORKDAYS — returns a count

=NETWORKDAYS(start, end)

How many working days are

between two dates?

Result: a number (e.g. 15)

WORKDAY — returns a date

=WORKDAY(start, days)

What date falls N working

days after a start date?

Result: a date (e.g. 15-Apr-2026)

Example 1: Project Phase Deadline

The most common use — given a project start date and a duration in working days, what is the completion date? WORKDAY calculates the exact deadline automatically, skipping weekends.

1
Calculate the end date for each project phase from start date + duration
#
A — Phase
B — Start date
C — Working days
D — Deadline
2
Discovery
02-Mar-2026
10
13-Mar-2026
3
Design
16-Mar-2026
15
06-Apr-2026
4
Build
07-Apr-2026
20
05-May-2026
Deadline formula in D2 — skips weekends automatically: =WORKDAY(B2, C2) With public holidays excluded: =WORKDAY(B2, C2, $H$2:$H$30) Chain phases — next phase starts the working day after the previous ends: Build start (B4) = day after Design deadline: =WORKDAY(D3, 1)
Discovery starts Mon 2 March, 10 working days later lands on Fri 13 March — WORKDAY automatically skips the weekend of 7-8 March. The result is a date serial number; format the cell as a date to display it correctly.
Format the result as a date: WORKDAY returns a date serial number. If the cell shows a number like 46256 instead of a date, press Ctrl+1, select Date from the Number tab, and choose your preferred format. Alternatively, wrap in TEXT: =TEXT(WORKDAY(B2,C2),"DD-MMM-YYYY").

Example 2: Invoice Payment Due Date

Payment terms like "Net 30 business days" mean 30 working days from invoice date — not 30 calendar days. WORKDAY calculates the exact due date, and can include a bank holiday list so payments never fall on a non-banking day.

2
Calculate invoice due dates on Net-30 business day terms
#
A — Invoice
B — Issue date
C — Terms
D — Due date
2
INV-0041
02-Mar-2026
30 days
13-Apr-2026
3
INV-0042
15-Mar-2026
14 days
02-Apr-2026
Net-30 business day due date: =WORKDAY(B2, 30, $H$2:$H$30) Dynamic terms from column C (strip " days" text if needed): =WORKDAY(B2, SUBSTITUTE(C2, " days", "") * 1, $H$2:$H$30) Days overdue (negative = still on time): =TODAY() - =WORKDAY(B2, 30, $H$2:$H$30) Positive = days overdue, negative = days until due Overdue status label: =IF(TODAY() > =WORKDAY(B2, 30), "OVERDUE", "Due in " & =WORKDAY(B2,30)-TODAY() & " days")

Example 3: Delivery Date Promise

E-commerce and logistics teams use WORKDAY to calculate promised delivery dates. Enter the order date and the standard dispatch and delivery time in working days — WORKDAY handles the calendar automatically, including weekend skipping for both dispatch and transit.

3
Calculate dispatch and delivery dates from an order date
#
A — Order ID
B — Order date
C — Processing
D — Dispatch
E — Delivery
2
ORD-1042
02-Apr-2026
2 days
06-Apr-2026
09-Apr-2026
3
ORD-1043
03-Apr-2026
2 days
07-Apr-2026
13-Apr-2026
Dispatch date = order date + 2 processing working days: =WORKDAY(B2, 2, $H$2:$H$30) Delivery date = dispatch + 3 transit working days: =WORKDAY(D2, 3, $H$2:$H$30) Single formula combining both steps: =WORKDAY(=WORKDAY(B2, 2, $H$2:$H$30), 3, $H$2:$H$30) Display as "Delivered by DD-MMM-YYYY": ="Delivered by " & TEXT(=WORKDAY(D2, 3), "DD-MMM-YYYY")
WORKDAY can be nested: Pass one WORKDAY result as the start_date of another WORKDAY formula. This chains stages together — processing then transit — in a single calculation rather than needing an intermediate cell for the dispatch date.

Example 4: Backward Planning — Find the Start Date

WORKDAY's days argument accepts negative numbers. Use a negative value to count backward from a deadline — useful when you know the end date and need to find out what start date is required to finish on time.

4
Find the required start date to meet a fixed deadline
#
A — Deliverable
B — Deadline
C — Working days
D — Must start by
2
Annual Report
31-Mar-2026
15
11-Mar-2026
3
Tax Filing
30-Apr-2026
10
16-Apr-2026
Negative days = count backward from the deadline: "What date is 15 working days BEFORE 31-Mar-2026?" =WORKDAY(B2, -C2, $H$2:$H$30) Are we already past the required start date? =IF(TODAY() > =WORKDAY(B2, -C2), "Start date passed — at risk", "On track") Working days until the required start date: =NETWORKDAYS(TODAY(), =WORKDAY(B2, -C2)) - 1
To finish the Annual Report by 31 March with 15 working days of effort, work must begin no later than 11 March. WORKDAY counts 15 working days backward from the deadline, skipping weekends and holidays.

Example 5: WORKDAY.INTL — Custom Working Week

WORKDAY always treats Saturday and Sunday as non-working days. WORKDAY.INTL adds a weekend argument so you can define any working week — essential for businesses in regions where the weekend is Friday-Saturday, or for teams with non-standard rest days.

5
Calculate deadlines for a team with Friday-Saturday weekends
WORKDAY.INTL syntax: =WORKDAY.INTL(start_date, days, [weekend], [holidays]) Standard weekend (Sat-Sun) — same as WORKDAY: =WORKDAY.INTL(B2, C2, 1) Friday-Saturday weekend (code 7 — common in GCC/Middle East): =WORKDAY.INTL(B2, C2, 7) Sunday only as rest day (6-day working week): =WORKDAY.INTL(B2, C2, 11) Custom 7-char string — 1=day off, 0=working. Characters: Mon,Tue,Wed,Thu,Fri,Sat,Sun Friday and Saturday off, all others working: =WORKDAY.INTL(B2, C2, "0000110", $H$2:$H$30) Cross-team deadline — each team has their own working week: =MAX( =WORKDAY(B2, C2), UK team (Sat-Sun off) =WORKDAY.INTL(B2, C2, 7)) UAE team (Fri-Sat off) Returns the later of the two deadlines — the constraint date
Cross-team deadline planning: When collaborating with teams in different countries, wrap WORKDAY.INTL results in MAX to find the latest date when all teams will have completed their working days. This ensures the global project plan respects every team's working week.

Example 6: Generate a List of Working Days

WORKDAY can generate a sequential list of working dates — one per row — by passing incrementing numbers as the days argument. This is useful for building timesheets, creating working day calendars, or generating a series of dates that excludes weekends.

6
Generate a working day calendar and check if a date is a working day
Manual sequence — each row adds one more working day from the start: (A1 = start date, each formula down the column increments by 1) =WORKDAY($A$1, 0) 1st working day =WORKDAY($A$1, 1) 2nd working day =WORKDAY($A$1, 2) 3rd working day ... Dynamic list using ROW() — enters in one column, works down automatically: =WORKDAY($A$1, ROW() - ROW($A$2)) Check if a specific date (A2) is a working day: Trick: subtract 1 day, ask for next workday — if same date, it is a workday. =IF(=WORKDAY(A2 - 1, 1) = A2, "Working day", "Weekend or holiday") With holiday list included in the check: =IF(=WORKDAY(A2 - 1, 1, $H$2:$H$30) = A2, "Working day", "Non-working")
The workday-check trick explained: WORKDAY(date - 1, 1) asks "what is the next working day after yesterday?" If today is a working day, the answer is today. If today is a weekend or holiday, the answer is the next working day — which is different from today. This is the standard pattern for testing whether any date is a working day.

Troubleshooting WORKDAY Errors

Result shows a number instead of a date

WORKDAY returns a date serial number. Select the cell, press Ctrl+1, and choose Date from the Number tab. Alternatively, wrap the formula in TEXT: =TEXT(WORKDAY(B2,C2), "DD-MMM-YYYY") to display it as a formatted string.

#VALUE! error

One of the arguments is not a valid date. Common causes: dates stored as text, a holiday list containing text mixed with dates, or a days argument containing text. Use ISNUMBER() to verify each date argument is a real numeric date value.

Result is one day off

Remember that WORKDAY does not count the start date. It starts from the next working day. If you need to include the start date as day 1, subtract 1 from the days argument: =WORKDAY(B2, C2-1). This is the most common source of off-by-one errors.

Holidays are not being excluded

The holiday range must use absolute references ($H$2:$H$30) when copied down. A relative reference shifts and misses dates. Also confirm all holiday dates are stored as real Excel dates — text dates that look like dates are not excluded.

WORKDAY.INTL string errors: The weekend string must be exactly 7 characters of "0" and "1" with at least one "0". An incorrect length or invalid characters return #VALUE!. The order is always Mon, Tue, Wed, Thu, Fri, Sat, Sun — not Sun, Mon.

Frequently Asked Questions

  • What does the WORKDAY function do in Excel?+
    WORKDAY calculates the date that falls a specified number of working days before or after a start date, automatically skipping Saturdays and Sundays. You can also provide an optional holiday list and those dates are skipped too. Use positive days for future dates and negative days for past dates. Format the result cell as a date — the raw output is a serial number.
  • What is the difference between WORKDAY and NETWORKDAYS?+
    WORKDAY takes a start date and a number of days, and returns a date. NETWORKDAYS takes two dates and returns a count of the working days between them. They are companion functions: use WORKDAY to find a deadline date when you know how many days the work will take; use NETWORKDAYS to measure how many working days have passed between two known dates.
  • Does WORKDAY count the start date?+
    No. WORKDAY starts counting from the day after the start date. If you start on Monday and add 1 working day, the result is Tuesday — Monday is not counted. This is different from NETWORKDAYS, which includes the start date. To include the start date in the count, reduce the days argument by 1: =WORKDAY(B2, C2-1).
  • How do I add holidays to WORKDAY?+
    Store holiday dates in a dedicated column. Pass the range as the third argument with absolute references: =WORKDAY(B2, C2, $H$2:$H$30). Locking with $ signs ensures the holiday range does not shift when you copy the formula down. You can also define the range as a named range (e.g. "PublicHolidays") and use the name directly in the formula for cleaner formulas.
  • How do I count backward from a deadline with WORKDAY?+
    Use a negative number for the days argument: =WORKDAY(deadline_date, -10) returns the date that is 10 working days before the deadline. This is useful for backward planning — when you know when something must be finished and need to calculate the latest possible start date to meet that deadline.
  • When should I use WORKDAY.INTL instead of WORKDAY?+
    Use WORKDAY.INTL when your working week does not follow a standard Saturday-Sunday weekend. It adds a weekend argument — either a code number or a 7-character string — that defines which days are non-working. Common uses include Friday-Saturday weekends in GCC countries (code 7), Sunday-only rest days (code 11), or any custom combination for shift workers and global project teams.