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

how to calculate business days in excel
how to calculate business days in excel

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 中運作的簡化端對端工作流程。

  1. 將日期輸入儲存格。將開始日期放在 A2 儲存格,結束日期放在 B2 儲存格。將兩者都格式化為日期(常用 → 數值 → 短日期),讓 Excel 將它們辨識為序號而非文字。
  2. 在空白儲存格中輸入公式。點選任一其他儲存格,輸入 =NETWORKDAYS(A2, B2)。按 Enter 鍵。該儲存格現在會顯示兩個日期之間的工作日數,週末已自動排除。
  3. 如有需要,新增假日清單。在新的一欄中,將要排除的假日以實際日期(而非文字)列出。例如在 C2 輸入 2024-01-01、C3 輸入 2024-07-04、C4 輸入 2024-12-25。
  4. 延伸公式以扣除假日。將公式修改為 =NETWORKDAYS(A2, B2, C2:C4)。清單中落在你的範圍內且落在平日的每個日期都會從計算中扣除。
  5. 按 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 能運作的計算,在瀏覽器中也會產生相同的數字。整個工作流程只需要三個步驟:

  1. 選擇開始日期。計算機預設為今天,因此請將它改成你期間開始的那一天。
  2. 選擇結束日期。工作日數、總天數與週末天數會即時更新,不需要按任何按鈕。
  3. 如有需要,新增假日。在選填的假日欄位中貼上以逗號分隔、格式為 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 對此有詳細說明。