Excel WORKDAY Function
WORKDAY returns a date that falls a set number of working days before or after a start date, skipping weekends and holidays.
WORKDAY calculates a date that falls a specific number of working days before or after a starting date. It automatically skips Saturdays and Sundays, and it can skip a list of holidays too if you give it one. The part people miss: WORKDAY always assumes a Saturday/Sunday weekend. If your team works a different schedule, this function will quietly return the wrong date, and you need WORKDAY.INTL instead.
Available in: Excel 365, Excel 2021, Excel 2019, Excel 2016, Excel 2013, Excel 2010, and Excel 2007. In Excel 2003 and earlier, WORKDAY required the Analysis ToolPak add-in; every version since built it in natively.
Syntax
=WORKDAY(start_date, days, [holidays])
| Parameter | Required | Description |
|---|---|---|
start_date | Yes | The date you're counting from. Must be a real date value, not text that looks like a date. |
days | Yes | How many working days to add. Positive numbers move forward in time, negative numbers move backward. Decimals get truncated to a whole number. |
holidays | No | A range of dates to exclude in addition to weekends. Leave this out and WORKDAY only skips weekends, meaning any public holiday still counts as a working day. |
start_date will throw #VALUE! if it isn't recognized as a genuine date serial number. A date typed as text, like the word "March" without a year, or an imported date from another system, is a common silent cause of this. Confirm the cell is right-aligned by default (a sign Excel reads it as a real date) before troubleshooting anything else.
Basic Example
A production order starts on March 2, 2026, and takes 15 working days to complete.
=WORKDAY(B2, 15)
// B2 = the order start date
// 15 = number of working days to add
WORKDAY starts at the date in B2, then steps forward one working day at a time, skipping every Saturday and Sunday it passes, until it has counted 15 valid working days. It returns March 23, 2026, which lands on a Monday, three calendar weeks after the start date once two full weekends are excluded.
How WORKDAY Works
Negative numbers move the date backward
Enter a negative number for days and WORKDAY counts backward from start_date instead of forward. =WORKDAY(B2, -5) finds the date five working days before the value in B2. This is the standard way to calculate a previous business day or a "must-start-by" deadline working backward from a deadline.
Excel always treats Saturday and Sunday as weekends
WORKDAY has no argument for changing which days count as weekends. It's hardcoded. If a team runs a Sunday-to-Thursday workweek, WORKDAY will still skip Saturday and Sunday and return dates that don't match reality. That's exactly the gap WORKDAY.INTL was built to close.
The start date itself is never counted
WORKDAY begins counting from the first working day after start_date, regardless of whether the start date itself falls on a weekday. So =WORKDAY(TODAY(), 1) on a Tuesday returns Wednesday, not Tuesday. This trips people up when they expect the start date to be "day zero" and get an answer one day later than expected.
Non-integer values in days get truncated, not rounded
=WORKDAY(B2, 4.9) behaves identically to =WORKDAY(B2, 4). Excel drops the decimal instead of rounding up. If a formula elsewhere calculates a fractional number of days, wrap it in INT() or ROUNDDOWN() first if you want predictable behavior, since WORKDAY will do the truncating silently either way.
Common Use Cases
Calculate a delivery or completion date
A shipping team needs to know when a 20-working-day order will actually ship, accounting for two known factory holidays.
=WORKDAY(C2, 20, holidays) // returns the ship date, skipping weekends and holidays
Find the previous business day
An invoicing macro needs "yesterday's business day" to pull the correct exchange rate.
=WORKDAY(TODAY(), -1) // returns the last working day before today
Exclude company-specific holidays
A project plan needs to skip both weekends and a named list of company holidays stored in a separate range.
=WORKDAY(D2, 30, company_holidays)
// D2 = project start date
// 30 = working days until milestone
// company_holidays = named range listing each holiday date
Generate a list of upcoming workdays
A shift scheduler needs the next 10 working dates listed out in a single formula instead of dragging one down.
=WORKDAY(TODAY(), SEQUENCE(10))
SEQUENCE(10) generates the array {1;2;3;...;10} and feeds each value into days in a single pass. WORKDAY calculates all ten results at once and spills them down the column. No fill handle required.
Combining WORKDAY with SEQUENCE is the fastest way to build a rolling list of future or past business dates. Change SEQUENCE(10) to SEQUENCE(10,,-1,-1) and the same formula spills the previous 10 working days instead.
Handling Errors
WORKDAY throws #VALUE! when it can't interpret one of its arguments as a valid date or number.
Common causes of #VALUE!:
start_dateis stored as text rather than a real datedayscontains text, a blank string, or a reference to an empty cell used in mathholidaysincludes a cell with text that isn't a recognizable date
Wrapping WORKDAY in IFERROR can hide which argument actually caused the problem. A message like "Check start date" is misleading if the real issue is a bad entry in the holidays range instead, since IFERROR treats every cause the same way and never tells you which one fired. Only use IFERROR when a clean fallback value matters more than diagnosing the cause, and keep the message generic enough that it doesn't point to the wrong argument:
=IFERROR(WORKDAY(B2, 15, holidays), "Check inputs")
If the formula is returning #VALUE! and you need to find the actual cause, remove the IFERROR temporarily and test start_date, days, and holidays on their own to isolate which one is broken.
Notes & Gotchas
What is the WORKDAY function in Excel?
WORKDAY returns a date that is a specified number of working days before or after a given start date. It automatically excludes Saturdays and Sundays, and optionally excludes any holiday dates you list in the third argument. It's built for scheduling calculations like delivery dates, project deadlines, and contract due dates.
How do you calculate workdays in Excel?
Use =WORKDAY(start_date, days) to find a future or past date based on a count of working days. For example, =WORKDAY(A2, 10) returns the date 10 working days after the date in A2, skipping weekends automatically. Add a third argument if you also need to exclude specific holidays.
What is the difference between WORKDAY and WORKDAY.INTL functions?
WORKDAY always assumes a fixed Saturday/Sunday weekend with no way to change it. WORKDAY.INTL adds a weekend argument, letting you choose from 11 preset weekend patterns or supply a custom seven-character string like "0000011" to mark any combination of days as non-working. WORKDAY.INTL has been available since Excel 2010; WORKDAY works in every version back to Excel 2007.
How do you exclude weekends and holidays using the WORKDAY function?
Weekends are excluded automatically, no argument needed. Holidays require an explicit list: pass a range of holiday dates as the third argument, and WORKDAY skips any date in that range in addition to weekends. Without that third argument, holidays are treated as ordinary working days.
How do you use NETWORKDAYS versus WORKDAY in Excel?
NETWORKDAYS and WORKDAY solve opposite problems. NETWORKDAYS takes a start date and an end date and returns the count of working days between them. WORKDAY takes a start date and a count of working days and returns the resulting date. Use NETWORKDAYS when you already know both dates and want the number of workdays; use WORKDAY when you know the count and need the finishing date.
Why does WORKDAY return #VALUE!?
The most common cause is a start_date that Excel doesn't recognize as a genuine date, often because it was imported as text or typed in a format Excel can't parse. Check that the cell is right-aligned, since text values default to left-aligned in Excel. A holidays range containing a stray text entry will also trigger this error.
Does WORKDAY count the start date as a workday?
No. WORKDAY always begins counting from the day after start_date, even if start_date itself is a weekday. A formula like =WORKDAY(B2, 1) where B2 is a Monday returns Tuesday, not Monday. This catches people who expect the start date to count as the first working day in the total.
What happens if the holidays list contains duplicate dates or blank cells?
Duplicates cause no problem; WORKDAY simply skips the date once regardless of how many times it appears in the range. Blank cells are also safe, since Excel treats them as date serial 0, which never matches a real calendar date and gets ignored during the count. Only text entries that Excel can't parse as dates will break the formula with #VALUE!.
Related Functions
| Function | Use this when... |
|---|---|
EDATE | You need to move by calendar months instead of counting working days. |
NETWORKDAYS | You already know the start and end dates and need the count of working days between them, rather than a resulting date. |
Related Functions
Excel DATEDIF Function
DATEDIF measures the gap between two dates in whatever unit you need, from complete years to total days. It's also one of the only Excel functions Microsoft never bothered to document.
Excel NETWORKDAYS Function
NETWORKDAYS calculates how many business days fall between a start and end date, which makes it the go-to formula for payroll, billing, and project timelines. It handles weekends automatically, but text-formatted dates and reversed date order are where it quietly breaks.
Excel AVERAGEIFS Function
AVERAGEIFS averages a range of numbers based on multiple conditions at once. It's the tool for questions like average sales in the West region during March.
Excel COUNTIFS Function
COUNTIFS extends COUNTIF to handle multiple conditions at once, no helper columns required. Here's the syntax, real examples, and where people get tripped up.