人資或行政常會遇到三種日期問題:這個人到職多久了、這個專案扣掉假日實際有幾個工作天、這份合約什麼時候到期。直接把日期加 30 或除以 365,結果多半會差一兩天,客戶一問就尷尬了。
今天就用一份假資料,把這三題一次解完,用到的是 DATEDIF、NETWORKDAYS、WORKDAY、EDATE 和 EOMONTH。日期在試算表裡是數字這件事,如果還不熟,可以先看 日期與時間入門。
先看資料
第一份是員工到職日,我在 E1 放了一個「基準日」,這邊假設今天是 2026/10/11:
| A | B | |
|---|---|---|
| 1 | 員工編號 | 到職日 |
| 2 | E101 | 2019/03/18 |
| 3 | E102 | 2022/08/01 |
| 4 | E103 | 2024/01/15 |
| 5 | E104 | 2025/11/20 |
| 6 | E105 | 2016/10/11 |
| 7 | E106 | 2025/10/12 |
E1 的內容是 2026/10/11。正式使用時,把 E1 換成 就會每天自己更新。我故意用一格基準日,而不是每條公式都寫 TODAY(),這樣結果才不會明天就變,要重算一次也只改一格。
第二份是假日清單,放在 H 欄,這邊用幾個示範日期:
| H | |
|---|---|
| 1 | 假日 |
| 2 | 2026/09/25 |
| 3 | 2026/10/10 |
| 4 | 2027/01/01 |
這三天分別是中秋節、國慶日和元旦。實際要放哪些日子,請以人事行政總處公告的行事曆為準;例如政府機關在國慶日逢週六時另有補假,這裡的日期只是示範格式,也讓你看到假日與週末重疊的情況。
算年資
DATEDIF 可以算兩個日期之間隔了幾年、幾個月或幾天,語法是:
- 開始日:起算的日期。
- 結束日:結束的日期。
- 單位:用雙引號包起來的文字。
"Y"是整年數,"M"是整月數,"D"是天數,"YM"是扣掉整年後剩下的整月數。
我想算 E101 到基準日的年資,整年數是:
E101 到基準日滿幾年
=DATEDIF(B2, $E$1, "Y")2019/03/18 到 2026/10/11,滿了 7 年。再接上 "YM" 取剩下的月數,用 & 串成一句話:
年資寫成 X年Y個月
=DATEDIF(B2, $E$1, "Y") & "年" & DATEDIF(B2, $E$1, "YM") & "個月"來看看結果,6 個人往下複製會是:
| 員工編號 | 年資 |
|---|---|
| E101 | 7年6個月 |
| E102 | 4年2個月 |
| E103 | 2年8個月 |
| E104 | 0年10個月 |
| E105 | 10年0個月 |
| E106 | 0年11個月 |
先手算一下 E101:2019/03/18 過 7 年是 2026/03/18,再過 6 個月是 2026/09/18,還沒到 10/18,所以是 7 年 6 個月。E105 到職日剛好是 2016/10/11,基準日也是 10/11,所以是整整 10 年。
還想知道剩幾天
官方文件裡有 "MD" 這個單位,意思是扣掉整月之後剩下的天數。不過我個人不用它,月底日期的結果不好預期。我習慣用另一個做法:先用 EDATE(下面會介紹)算出「滿整月的那一天」,再用基準日去減它。
滿整月之後剩下的天數
=$E$1 - EDATE(B2, DATEDIF(B2, $E$1, "M"))E101 滿 90 個月是 2026/09/18,到 10/11 剩 23 天,所以完整年資是 7 年 6 個月又 23 天。6 個人的天數依序是 23、10、26、21、0、29。這格如果顯示成怪怪的日期,把格式改成「格式」>「數值」>「數字」就可以了。
算工作日
NETWORKDAYS
NETWORKDAYS 會算兩個日期之間有幾個工作日,週六、週日不算,也可以另外給一份假日清單。
- 開始日、結束日:要算的期間,兩端的日期都會一起算進去。
- 假日:選填,一個放日期的範圍。
我有兩個專案,要算實際投入的工作天:
| A | B | C | |
|---|---|---|---|
| 1 | 專案編號 | 開始日 | 結束日 |
| 2 | P01 | 2026/09/21 | 2026/10/16 |
| 3 | P02 | 2026/10/05 | 2026/10/16 |
扣掉週末和假日的工作天數
=NETWORKDAYS(B2, C2, $H$2:$H$4)P01 的結果是 19,P02 是 10。P01 手算:9/21 是週一,到 10/16 週五剛好 4 個整週,4 × 5 = 20 天,扣掉週五 9/25 中秋節,剩 19 天。如果把第三個參數拿掉,P01 就會變成 20。
P02 有個有趣的地方,示範清單裡的國慶日 2026/10/10 剛好是週六,已經被週末排掉了,所以放不放假日清單都是 10(不含政府機關的補假)。假日落在週末不會被重複扣掉,這邊不用特別處理。
WORKDAY
WORKDAY 方向相反,是知道開始日和要走幾個工作日,問結束日是哪天。
- 開始日:起算的日期,這一天本身不算。
- 工作天數:要往後走幾個工作日,負數則往前。
- 假日:選填,同樣是放日期的範圍。
先用一個小例子手算。2026/10/9 是週五,往後 3 個工作日:週一 10/12 是第 1 天,週二 10/13 是第 2 天,週三 10/14 是第 3 天,所以結果是 2026/10/14。
週五起算,3 個工作日後
=WORKDAY(DATE(2026,10,9), 3)如果 10/12 剛好放假,那天不算,第 1 天變成 10/13,結果就順延到 2026/10/15。
回到實際的合約,開工日 2026/09/21,工期 20 個工作日:
開工日起算 20 個工作日,排除假日
=WORKDAY(B2, 20, $H$2:$H$4)這邊的 B2 放 2026/09/21。沒有假日的話,4 週 20 個工作日剛好落在 2026/10/19,但中秋節 9/25 被排掉,要多走一天,所以結果是 2026/10/20。
兩個函式可以互相檢查:WORKDAY 算出來的結束日,丟進 NETWORKDAYS 的話,因為 NETWORKDAYS 連開始日也算進去,當開始日是工作日時,天數會是工作天數加 1。上面這個例子, 會得到 21。
算到期日
EDATE
EDATE 把日期往後(或往前)推幾個整月。
- 開始日:起算的日期。
- 月數:要推幾個月,負數是往前。
合約從 2026/10/11 開始,期限 12 個月:
12 個月後的同一天
=EDATE(DATE(2026,10,11), 12)結果是 2027/10/11。通常合約寫的是「到期日前一天」,所以我會再減 1,變成 2027/10/10。
那如果起算日是月底呢?試用期 3 個月,到職日是 2026/11/30:
月底起算,推 3 個月
=EDATE(DATE(2026,11,30), 3)2027 年 2 月沒有 30 號,結果會落在該月的最後一天,也就是 2027/02/28,不會跑到 3 月。
EOMONTH
EOMONTH 會回傳某個月的月底。
- 開始日:用來決定是哪個月。
- 月數:0 是當月,1 是下個月,-1 是上個月。
發票日是 2026/10/11,月結的話,次月底收款:
發票日的次月月底
=EOMONTH(DATE(2026,10,11), 1)結果是 2026/11/30。月數改成 0,就是當月月底 2026/10/31。EOMONTH 不用自己判斷這個月是 28、30 還是 31 天,這是我最常拿它來用的地方。
NETWORKDAYS 算的是工作天數;開始、結束還帶有時分,且需要扣午休時,可以看 跨日請假時數計算 的逐日班段交集做法。
為什麼這樣組
年資我選 DATEDIF,而不是天數除以 365,因為閏年會讓除出來的年數在邊界附近差一天。工作日則是看你手上的資料:知道兩端日期就用 NETWORKDAYS,知道工期就用 WORKDAY。
維護上要改的地方不多。新增員工只要把公式往下複製,新一年的假日加在 H 欄清單的最後,再把範圍拉大一點就好。我自己會把假日清單放在獨立的工作表,公式用 假日!A2:A30 這種範圍,留一些空白列給明年用。
如果想做「本月第一天」「最近 N 天」或到期提醒,可以接著看 進階日期計算。
練習
年資滿一年的日期
E106 的到職日是 2025/10/12,哪一天年資滿一年?請用 EDATE 寫出來。
到專案結束還有幾個工作日
基準日在 E1(2026/10/11,週日),專案結束日是 2026/10/16,請排除 H2:H4 的假日,算出從基準日到結束日有幾個工作日。
試著把自己公司的到職日貼進去,看看年資會不會跟人事系統一致吧!
我是喜特先生,Mr. Sheet,我們下個教學見!
接下來可以
這篇在技能樹的 Lv.2「進階分析」,模組「計算日期與時間差」(第 1/1 篇)。讀完這篇,路線上的下一個模組是「處理與分析數字」。
回到技能樹相關文章
查看所有文章日期與時間入門:日期序號、DATE、TODAY 與文字日期
從日期序號開始,認識 DATE、TODAY、NOW、YEAR、MONTH、DAY,學會日期加減、分辨文字日期和真日期,並搞清楚顯示格式和儲存格的值是兩回事。
日期函式的陷阱:2/29 週年、月底、季末、DATEDIF 與週末字串
整理 DATE、EDATE、EOMONTH、DATEDIF、NETWORKDAYS.INTL、WORKDAY.INTL 常踩的坑:年份小於 1900 被加 1900、2/29 的週年日、月底連續推算、帶時間的月底篩選、DATEDIF 的 MD 單位、週末字串漏引號、補班日,以及 TODAY 讓結果每天都變。
留言討論
共 0 則留言
