Excel 的 NETWORKDAYS 公式會計算兩個日期之間的工作日數,自動將落在平日的起訖兩天都納入計算,並從總數中扣除所有的星期六與星期日。語法為 =NETWORKDAYS(start_date, end_date, [holidays]),其中選填的第三個參數是要從計算結果中扣減的日期清單。以這種方式使用時,這個公式可以在單一儲存格中回答「這兩個日期之間有幾個工作日」這個日常問題,因此已成為專案截止日、薪資計算、出貨時間窗口以及 SLA 處理時程等情境的標準 Excel 解決方案。NETWORKDAYS 採內含計算:同一週的週一至週五會回傳 5,單獨選取的一個平日則會回傳 1。如果你還需要處理自訂的週末模式(例如中東地區的週五至週六週末),Excel 提供 NETWORKDAYS.INTL,語法相同但多一個週末模式的參數。對於不想輸入公式、整理假日清單,甚至不想打開試算表的人,可以在瀏覽器中透過 Business Days Calculator 進行相同的計算,它會鏡像 NETWORKDAYS 的內含計算行為與選填的假日清單,並且無需任何設定就能立即回傳答案。

Excel 的 NETWORKDAYS 公式運作原理
幾乎所有 Excel 的工作日計算背後的公式都是 NETWORKDAYS,這個內建的日期函數已隨 Excel 出貨數十年。它需要兩個必要參數和一個選填參數:
- start_date — 你要計算期間的第一天。它可以是儲存格中的日期、直接輸入公式中的日期,或是其他函數(例如 DATE(2024,1,1))的回傳結果。
- end_date — 期間的最後一天。函數不會自動帶入預設值;你必須同時提供起訖兩端日期。
- holidays(選填) — 從工作日計算中要排除的日期範圍,例如儲存在另一欄的國定假日清單。
NETWORKDAYS 內部的運作方式與 Business Days Calculator 在瀏覽器中的運作方式完全相同:計算兩個端點之間的平日時數,然後扣除落在平日的假日。不同於一般的 =B2-A2 減法(會回傳總日曆天數),NETWORKDAYS 會給你實際有進行工作的天數。
輸出永遠是整數。如果開始日期晚於結束日期,Excel 也會回傳 #NUM! 錯誤,因此公式對參數順序很敏感。如果你想在不產生錯誤的情況下互換兩者,可以用 ABS() 將結果包起來,或是顛倒輸入順序。
在實際工作表中建立公式
以下是可在 Excel 2016、Excel 2019、Excel 2021、Excel 365 以及 Mac 版 Excel 中運作的簡化端對端工作流程。
- 將日期輸入儲存格。將開始日期放在 A2 儲存格,結束日期放在 B2 儲存格。將兩者都格式化為日期(常用 → 數值 → 短日期),讓 Excel 將它們辨識為序號而非文字。
- 在空白儲存格中輸入公式。點選任一其他儲存格,輸入 =NETWORKDAYS(A2, B2)。按 Enter 鍵。該儲存格現在會顯示兩個日期之間的工作日數,週末已自動排除。
- 如有需要,新增假日清單。在新的一欄中,將要排除的假日以實際日期(而非文字)列出。例如在 C2 輸入 2024-01-01、C3 輸入 2024-07-04、C4 輸入 2024-12-25。
- 延伸公式以扣除假日。將公式修改為 =NETWORKDAYS(A2, B2, C2:C4)。清單中落在你的範圍內且落在平日的每個日期都會從計算中扣除。
- 按 Enter 鍵並讀取結果。該儲存格現在會顯示扣除週末與假日後的工作日數。
若想了解公式的運作行為,這裡有個簡單的示範範例:計算 2024 年 1 月 1 日星期一至 2024 年 1 月 15 日星期一之間的工作日數。在未輸入假日的情況下,公式 =NETWORKDAYS(DATE(2024,1,1), DATE(2024,1,15)) 會回傳 11。其推算過程非常機械化:這 15 個日曆天包含兩個完整的週(每週剛好貢獻 5 個平日,共 10 天),再加上期間最後剩下的那個星期一(再貢獻 1 天),合計為 5 + 5 + 1 = 11 個工作日。瀏覽器工具對相同的輸入也會產生相同的數字。
NETWORKDAYS 的不足之處
NETWORKDAYS 是大多數英語系國家工作週的合適工具,但它在實際專案中很快就會浮現出三個實務上的限制。
- 它預設星期六與星期日為週末。如果你的業務採用週五至週六或週日至週四的排班,則需改用 NETWORKDAYS.INTL 並明確指定週末遮罩。
- 它無法扣除部分天數。半天工作、落在星期六但提前到星期五補休的國定假日,以及輪班工作等情況,都需要手動調整公式,或在其上疊加另一個函數。
- 它完全信任你提供的假日清單。打錯字、日期格式錯誤,或重複的假日,都會在不知不覺中扭曲計算結果。落在週末的日期會被優雅地忽略,但如果某個日期被列為文字字串 "2024-01-01" 而非真正的日期,則會被當作序號處理,使整個結果平移數萬天。
第一個限制是迫使大多數使用者轉用 NETWORKDAYS.INTL 的主因。第二與第三個限制,則是人們常寧可改用獨立工具,而非再寫一個公式的原因。
透過 Business Days Calculator 跳過試算表
如果需要無需任何設定的快速答案,只要將兩個日期貼到 Business Days Calculator 中就能讀取工作日數。這個工具的計算方式與 NETWORKDAYS 相同 — 採內含計算、已扣除週末日 — 因此任何在 Excel 能運作的計算,在瀏覽器中也會產生相同的數字。整個工作流程只需要三個步驟:
- 選擇開始日期。計算機預設為今天,因此請將它改成你期間開始的那一天。
- 選擇結束日期。工作日數、總天數與週末天數會即時更新,不需要按任何按鈕。
- 如有需要,新增假日。在選填的假日欄位中貼上以逗號分隔、格式為 YYYY-MM-DD 的日期清單。每個符合條件的日期都會從工作日總數中扣除;落在星期六或星期日的假日會被忽略,而重複的日期只會被扣除一次。
所有運算都在你的裝置上執行,因此日期絕不會離開瀏覽器。這讓這個工具成為人力資源資料、薪資週期與合約日期的理想選擇,特別是當你不想把這些資料貼到第三方試算表時。
Excel 與 Business Days Calculator 的比較
兩種途徑最終都會得到相同的內含平日數,但它們各有不同的取捨。
| 功能 | Excel NETWORKDAYS | Business Days Calculator |
|---|---|---|
| 計算週一至週五的平日 | 是 | 是 |
| 內含起訖兩端日期 | 是 | 是 |
| 扣除假日清單 | 可以(以儲存格範圍方式) | 可以(以逗號分隔的 YYYY-MM-DD) |
| 自訂週末模式 | 只能透過 NETWORKDAYS.INTL | 不行(僅支援週一至週五) |
| 顯示總日曆天數 | 不行(需要另一個公式) | 可以 |
| 顯示已扣除的週末天數 | 不行(需要另一個公式) | 可以 |
| 需要安裝 Excel | 是 | 否 |
| 輸入時即時更新 | 只能在按 Enter 鍵之後 | 是 |
| 資料會離開你的裝置 | 只有在檔案被分享時 | 否 |
當工作日計數是依賴其他儲存格的較大型模型的一部分、當你需要 NETWORKDAYS.INTL 的自訂週末模式,或是當你正在處理其他人已共用的工作簿時,請選擇 Excel。當你需要的只是一個值得信賴的單一數字、不想打開試算表時,尤其是當這個答案要放進電子郵件或工單而非儲存格時,請選擇瀏覽器工具。
常讓人踩坑的邊界情況
大多數錯誤的答案源自以下四種邊界情況之一。在將數字提交為截止日或薪資計算結果之前,每一種都值得檢查一下。
- 開始與結束日期相同。單一平日會回傳 1 個工作日而非 0,因為 NETWORKDAYS 採內含計算。單一週末日則會回傳 0。
- 日期順序顛倒。如果 start_date 晚於 end_date,Excel 會回傳負數。瀏覽器計算機的處理方式相同,因此看到負值時請將日期互換。
- 閏日。2 月 29 日只要落在週一至週五,就會被視為一般的平日。NETWORKDAYS 與瀏覽器工具所使用的「完整週數加餘數」演算法,在跨閏年時依然精準無誤,因此答案不需要任何特殊處理。
- 假日落在週末。列出在星期六或星期日的國定假日會被忽略,因為那天本來就不是工作日。兩種工具都套用相同的規則。
對於需要反向計算 — 也就是從某個起始日期出發,找出往後數 N 個工作日的日期 — 的讀者,請將此工作流程與 Date Add Subtract Calculator 搭配使用,以新增或扣減整數天數,然後再用工作日計數進行交叉驗證。
如果你正在權衡各種選項,Add Days to Any Date with Calendar-Accurate Results 對此有詳細說明。
如果你正在權衡各種選項,How to Calculate Exponential Moving Average in Excel 對此有詳細說明。