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)

計算間距的神器: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 世紀的清代歷史資料,請務必留意這個一天的微小差距。

掌握了日期處理,你已經解決了行政管理中最麻煩的一部分。