Excel 日期與時間函數:精準計算天數、年資與期限
在 Excel 中,日期和時間的處理常讓人感到困惑。為什麼 2023/10/25 加上 1 會變成 2023/10/26?那是因為在 Excel 的底層系統中,日期其實是「數字」。從 1900 年 1 月 1 日開始算作第 1 天,往後推移。
理解這個本質後,再配合以下強大的日期函數,你就能輕鬆完成年資計算、專案進度追蹤以及工時統計。
獲取當前時間:TODAY, NOW
這兩個函數不需要任何參數,會隨著每次開啟檔案或重新計算而更新。
=TODAY():傳回今天的日期(不含時間)。常用於計算帳款逾期天數。=NOW():傳回目前的日期與精確時間。
拆解與組裝:YEAR, MONTH, DAY, DATE
如果你有一串完整的日期,但只想單獨提取出「月份」進行分類:
=YEAR(日期):傳回年份。=MONTH(日期):傳回月份(1-12)。=DAY(日期):傳回天數。=DATE(年, 月, 日):將三個數字組合成一個標準格式的日期。- 技巧:如果你想把所有日期都改成「該月 1 號」,可以寫成
=DATE(YEAR(A1), MONTH(A1), 1)。
- 技巧:如果你想把所有日期都改成「該月 1 號」,可以寫成
計算間距的神器:DATEDIF (隱藏函數)
這是一個在 Excel 的函數選單中找不到(輸入時自動完成也不會出現)的隱藏函數,但它非常強大,常用於計算年資、年齡或專案月數。
- 語法:
=DATEDIF(開始日期, 結束日期, "單位") - 單位說明:
"Y":計算完整的年數。"M":計算完整的月數。"D":計算相差的天數。"MD":忽略年月,僅計算相差的天數。"YM":忽略年份,僅計算相差的月數(常用於計算幾年「又幾個月」)。
實戰範例:精準年資計算法
假設 A1 是入職日期,想算出目前的服務時長。
- 公式:
=DATEDIF(A1, TODAY(), "Y") & "年" & DATEDIF(A1, TODAY(), "YM") & "個月"
工作日計算:NETWORKDAYS, WORKDAY
如果你的計算需要扣除週六與週日:
=NETWORKDAYS(開始日, 結束日, [節假日列表]):計算兩個日期之間有多少個工作日。=WORKDAY(起始日, 天數, [節假日列表]):算出指定天數(工作日)後是哪一天。
選填參數:[節假日列表]
上述兩個函數都有一個選填參數 [節假日列表]。Excel 預設只會扣除「週六、週日」,但它並不知道哪天是中秋節或過年。
- 如何操作:建議在工作表的邊角(如 H 欄)列出全年的國定假日日期。
- 公式範例:
=NETWORKDAYS(A1, B1, H1:H15),這樣 Excel 就會同時扣除六日與你指定的假日。
進階排班:WORKDAY.INTL
如果你在餐飲業、物流業,或你的公司並非「週六、週日」固定周休,那麼你就需要 WORKDAY.INTL (International)。
=WORKDAY.INTL(起始日, 天數, [週末代碼], [節假日列表])
- [週末代碼]:讓你自己定義哪天是休息日。
1:週六、週日(預設)11:僅週日- 字串模式:你可以用
0(工作)與1(休息)組成的 7 位字串來表示。例如"0000011"代表五六休息,一到四工作。
- 實戰範例:
假設某員工固定週一休息,今天要處理一個 5 個工作日後需完成的任務。
=WORKDAY.INTL(TODAY(), 5, "1000000")(字串第一位代表週一,1表示週一休息,其餘工作)。
日期的數學運算技巧
- 直接相減:
=結束日期 - 開始日期,得出的數字就是相差的天數。 - 計算到期日:
=日期 + 30代表該日期的 30 天後。 - 格式化問題:如果相減後出來的是一個奇怪的日期(如
1900/1/15),別慌!那是因為儲存格格式被預設為日期了。把它改回「數值」或「一般」格式,你就能看到正確的天數數字。
專業叮嚀:1900 年 2 月 29 日的 Bug
Excel 官方為了保持與舊軟體 Lotus 1-2-3 的相容性,錯誤地將 1900 年視為閏年(實際上 1900 只有 365 天)。這對 1900/3/1 之後的現代日期計算沒有任何影響,但若你在處理 19 世紀的清代歷史資料,請務必留意這個一天的微小差距。
掌握了日期處理,你已經解決了行政管理中最麻煩的一部分。