網友問到 Excel 的問題:如何在一個日期區間中計算工作天數、放假天數?
參考下圖,因為每個人遇到的狀況不同,當要計算工作天數時,你可能要考量到星期六、星期日和放假日,也要考量到補班日,該如何處理?
【公式設計與解析】
1. 不含六日的工作天數
儲存格C2:=NETWORKDAYS(A2,B2)
利用 NETWORKDAYS 函數,只要給予起始和終止的日期,即可計算日期區間中扣除星期六日的天數。
如果你的 Excel 版本沒有 NETWORKDAYS 函數,則可以改用 SUMPRODUCT 函數:
儲存格C2:=SUMPRODUCT(1*(WEEKDAY(ROW(INDIRECT("A" & N(A2) & ":A" & N(B2))),2)<6))
"A" & N(A2) & ":A" & N(B2):將二個日期的數值組成一個儲存格範圍,例如:A42370:A42552。其中 N 函數可以將一個日期傳回其代表的數值。
INDIRECT("A" & N(A2) & ":A" & N(B2):利用 INDIRECT 函數將上式轉換為真實的儲存格參照位址。
ROW(INDIRECT("A" & N(A2) & ":A" & N(B2))):將上式置入 ROW 函數,轉換為列號範圍,例如:A42370:A42552→ROW(A42370:A42552),在 SUMPRODUCT 函數中可以表示為 42370, 42371, 42372, ..., 42551, 42552 組成的陣列。
WEEKDAY(ROW(INDIRECT("A" & N(A2) & ":A" & N(B2))),2)<6:在 WEEKDAY 函數中利用參數『2』,得到傳回值小於 6 者(表示星期一至星期五)的 TRUE/FALSE 陣列。
1*(WEEKDAY(ROW(INDIRECT("A" & N(A2) & ":A" & N(B2))),2)<6):利用『*1』,將上式中的 TRUE/FALSE 陣列轉換為 1/0 陣列。
最後,透過 SUMPRODUCT 函數加總,即為所求。
2. 不含六日、不含假日的工作天數
儲存格D2:=NETWORKDAYS(A2,B2,$G$3:$G$16)
在 NETWORKDAYS 函數置入第 3 個參數,其為放假日的儲存格範圍。
如果你的 Excel 版本沒有 NETWORKDAYS 函數,則可以改用 SUMPRODUCT 函數:
SUMPRODUCT(($G$3:$G$16<=B2)*($G$3:$G$16>=A2)):
求在儲存格G3:G16的放假日中,介於儲存格B2和儲存格A2兩個日期之間的個數。
儲存格D2:=SUMPRODUCT(1*(WEEKDAY(ROW(INDIRECT("A" & N(A2) & ":A"
& N(B2))),2)<6))-SUMPRODUCT(($G$3:$G$16<=B2)*($G$3:$G$16>=A2))
3. 不含六日、不含假日、含補班日的工作天數
SUMPRODUCT(($G$19:$G$21<=B2)*($G$19:$G$21>=A2)):
求在儲存格G19:G21的補班日中,介於儲存格B2和儲存格A2兩個日期之間的個數。
儲存格E2:=NETWORKDAYS(A2,B2,$G$3:$G$16)+SUMPRODUCT
(($G$19:$G$21<=B2)*($G$19:$G$21>=A2))
如果你的 Excel 版本沒有 NETWORKDAYS 函數,則可以改用 SUMPRODUCT 函數:
儲存格E2:=SUMPRODUCT(1*(WEEKDAY(ROW(INDIRECT("A" & N(A2) & ":A" &
N(B2))),2)<6))-SUMPRODUCT(($G$3:$G$16<=B2)*($G$3:$G$16>=A2))+
SUMPRODUCT(($G$19:$G$21<=B2)*($G$19:$G$21>=A2))

不好意思SUMPRODUCT一樣可以自動算一個月(不含六日)的上班天數嗎?
請參考以前的文章: http://isvincent.pixnet.net/blog/post/38625941 http://isvincent.pixnet.net/blog/post/38287945 http://isvincent.pixnet.net/blog/post/46651399 http://isvincent.pixnet.net/blog/post/34785349
請問能只算六日天數或包含國定假日天數
可參考這篇文章:http://isvincent.pixnet.net/blog/post/45881183
您好,不好意思請問一下,目前用下面這個公式計算"某日期增加20個工作天",但是有經過彈性放假、補班日的話日期就會錯誤,不知道是什麼原因......麻煩老師解答了 =WORKDAY(C12,20,$A$34:$A$48)+SUMPRODUCT($C$34:$C$48>=C12)
您好,想請教大師您如何指定的起始日以及同時假日也不算工作日?例如:指定每週五不算工作日,且六日也不算工作日,但週四到週五需算兩個工作日,有合適的公式可以參考嗎?麻煩您幫小弟解惑,感謝您~
你好!!文章的內容,可以清楚使用方式,很有收穫! 想要詢問的範例為, 案件審查過程,有起始日期和結束日期區間,但在此區間,有補件、檢驗等區間需要計算工作天來扣除, 是否需要分段計算,還是有公式可以合併計算呢!! 舉例來說 起始日2018/1/1,2018/1/31 補件過程20181/5~1/8,1/12~1/16 檢驗過程20181/18~1/23 需要分為3個區間,用networkdays分別計算, 還是可以合併計算呢?! 謝謝你!
*****
請問不含六日的工作天是要加入樞紐中,已用函數加入進去樞紐中,但總計的部份我需要是平均值,要如何調整???
您好 我想請問預計完成日 (扣除工作日的計算) 例如 1/1 開始 扣除假日的工作時間 為10個工作天 預計完成日為1/15
*****