若要在 Excel 中根據出生日期計算年齡,最常見的公式是 =DATEDIF(DOB, TODAY(), "Y"),它會回傳兩個日期之間完整的年數。DATEDIF 是 Excel 一個未記載於說明文件中、但受到完整支援的函數,會從起始日期開始,一次以一個單位向前推進——先計算完整的年數,再計算剩下的月數,最後計算剩餘的天數。這種逐步計算的方式,正是專門的線上年齡計算工具內部所採用的方法,使用的也是像 date-fns 這類值得信賴的日期函式庫所採用的相同做法。問題在於,當生日落在 31 號而目標月份天數較少時,DATEDIF 可能會悄悄產生負的天數值,因為 Excel 並非在所有邊緣情況下都能正確地借用月份。一個依實際月曆逐月借用的線上年齡計算工具,則能毫無除錯地處理這些情況。在下方你可以找到精確的 Excel 公式、它們會出錯的地方,以及一個只要填一個欄位就能立刻回傳相同答案的瀏覽器工具。
Excel 將每個日期儲存為一個序號——也就是自 1900 年 1 月 1 日起算的天數——所以將兩個儲存格相減就能得到總天數,這完全能處理「我已經活了多少天」這類問題。然而,一旦你希望以年、月、日來表示年齡時,數學運算就變成一個曆法問題,而非單純的減法問題,單純相減的規則便不再適用。

為什麼在 Excel 中根據出生日期計算年齡會變得棘手
最直觀的捷徑——將日對日、月對月相減——會在生日落在 31 號而目標月份只有 30 天時,產生像負天數這種不可能的值。真實的年齡算術必須正確地借用:當目前的日期早於出生日期的那一天時,公式(或計算工具)會借用一整個月,再加上該月的實際天數——28、29、30 或 31——絕不會是固定的 30 天。每個月的天數長短不一,因此所借用的天數必須與實際曆法一致。
閏年又增加了另一層複雜度。依據格里高利曆的規則,能被 4 整除的年份是閏年,但世紀年例外,必須同時能被 400 整除才算閏年。這表示 2000 年是閏年,但 1900 年和 2100 年都不是。2 月只有在這些年份才會有 29 天,任何跨越 2 月的年齡計算,都必須知道該年的 2 月究竟有 28 還是 29 天。2 月 29 日出生的生日也會讓直觀的計算失效,因為他們出生的那個曆日每四年中就有三年根本不存在。大多數年齡計算的 bug 都來自以下兩個來源之一:錯誤的月份借用,或是錯誤的 2 月天數。
Excel 中根據出生日期計算年齡的公式
假設你的出生日期位於 A2 儲存格,而你想要計算今天當下的年齡。
- 僅計算年數:=DATEDIF(A2, TODAY(), "Y")
- 完整年數之外的剩餘月數:=DATEDIF(A2, TODAY(), "YM")
- 完整月數之外的剩餘天數:=DATEDIF(A2, TODAY(), "MD")
- 合併於單一儲存格:=DATEDIF(A2, TODAY(), "Y") & " years, " & DATEDIF(A2, TODAY(), "YM") & " months, " & DATEDIF(A2, TODAY(), "MD") & " days"
- 以小數表示的年齡(年):=YEARFRAC(A2, TODAY())
- 已活著的總完整天數:=TODAY()-A2
- 未來某個日期的年齡:=DATEDIF(A2, DATE(2030,6,15), "Y")
三個 DATEDIF 單位代碼 "Y"、"M" 和 "D" 會回傳兩個日期之間完整的年數、完整的月數以及完整的天數。對應的代碼 "YM"、"MD" 和 "YD" 則會在扣除較大單位後,回傳剩餘的單位數,這正好就是年齡計算工具內部所執行的逐步計算方式。當表單需要帶小數的年齡時,YEARFRAC 是合適的工具,因為它會回傳像 32.57 這樣的小數,而非整數的拆解結果。
當 DATEDIF 回傳 #NUM! 錯誤時,通常代表結束日期早於開始日期。將公式包進 =IF(A2>TODAY(), "Future date", DATEDIF(A2, TODAY(), "Y")) 中,便能顯示較為友善的訊息。同樣的概念也能讓你把結束日期鎖定在某個固定參考點——例如學年的開始——只要把 TODAY() 換成 DATE(2025, 9, 1) 即可。
若想更深入地了解這些公式,DATEDIF、YEARFRAC 與 INT 教學在一個頁面中涵蓋了所有的變化形式。
相同答案,一鍵完成:年齡計算工具
三個 DATEDIF 串接使用確實能得到正確答案,但你必須記住語法、修正負天數的邊緣情況,並且每次版面變動時都要重建公式。Lizely 上的年齡計算工具只需要一個欄位就能完成相同的運算。你輸入出生日期,年-月-日的拆解結果會立刻出現,只要你變更日期,結果就會即時更新——不需要輸入任何公式,也沒有需要除錯的邊緣情況。所有運算都在你的瀏覽器本地端執行,因此你的出生日期永遠不會離開你的裝置。對於要求以「完整年數」填寫年齡的人事表、學校註冊單或保險表單,你可以把結果直接貼回 Excel,不必每次都重建公式。
這個計算工具依實際曆法逐月借用,這與 date-fns 函式庫中 differenceInYears、differenceInMonths 和 differenceInDays 函式所採用的方法相同。若想實際並列比較 Excel 做法與線上工具,兩個日期之間的年齡教學會在兩種環境下逐步講解相同的問題。
如何使用年齡計算工具
- 在第一個欄位中選擇你的出生日期——你的確切年齡會立刻出現,不需要按任何按鈕。
- 將第二個日期保留為今天,或將其設定為任何過去或未來的日期,以找出你在那個確切時刻的年齡。
- 閱讀以年、月、日表示的年齡,以及總月數、總週數、總天數,還有距離你下次生日的倒數計時。
這個計算工具使用了與 date-fns 相同的逐月借用邏輯——從你的出生日期開始向前推進,先加入完整的年數,直到再加一年就會超過目標日期為止,接著加入完整的月數,最後計算剩下的天數。正是這個順序讓結果保持非負且自我一致。總週數和總天數計算的是與拆解結果相同的時間跨度,只是以單一單位表示,而即時倒數計時則會顯示距離你下次生日的天數。
讓 Excel 公式踩雷的邊緣情況
有三種情境經常會讓 Excel 公式出錯,而年齡計算工具都能自動處理。
- 2 月 29 日出生的生日。2 月 29 日只存在於閏年——也就是能被 4 整除的年份,但若為世紀年則還必須能被 400 整除,所以 1900 年和 2100 年都不是閏年。在平年時,計算工具會將生日觀察為 2 月 28 日,這是歐洲許多地方及許多法律體系所採用的慣例,因此閏日寶寶每年都能增加一整歲,而非每四年才增加一次。
- 月底出生的生日(例如 1 月 31 日)。當目標月份天數少於出生月份時,使用 "MD" 代碼的 Excel DATEDIF 可能會回傳負值或錯誤的天數。年齡計算工具則會借用實際的月份天數——28、29、30 或 31——而非假設為 30 天。
- 參考日期早於出生日期。Excel 會跳出 #NUM!;計算工具則會直接告訴你這個日期是在未來,而不是回傳一個負的年齡。
在年齡計算工具中,這些邊緣情況都不需要任何設定——它們已經內建於借用邏輯中。如果你希望在活頁簿中也達到相同的行為,就必須在 DATEDIF 之上堆疊 IF 陳述式,這通常比為了單一檢查所花的功夫還要多。
年、月、日——以及並列顯示的總計
除了年-月-日的拆解結果外,年齡計算工具也會回傳總計:以總完整月數、總週數和總天數表示的年齡,再加上距離你下次生日的即時倒數計時。總天數是兩個日期之間精確的日曆天數計算,會使用每個月的實際天數,並計算期間的每一個閏日。總週數是將天數除以七並向下取整。總月數則是已流逝的完整月數。這些總計計算的是與年-月-日拆解結果相同的時間跨度,只是以單一單位表示,這對於里程碑來說很實用——例如以週數表示的嬰兒年齡、以天數計算的週年紀念、保險與年金的資格區間,或表單所要求的法定年齡。
有一個文化上的小提醒:這種西方年齡計算方式與東亞的虛歲不同,虛歲中一個人在出生時就是一歲,並在農曆新年而非生日時增加一歲,因此兩種系統可能相差一至兩歲。年齡計算工具回傳的是西方算法,這也是所有 Excel 公式以及英語世界所有官方表單所採用的方式。
何時使用 Excel,何時使用年齡計算工具
| 情境 | 最佳選擇 |
|---|---|
| 單次年齡查詢,任意參考日期 | 年齡計算工具 |
| 有數百筆出生日期的人事表 | Excel DATEDIF 公式 |
| 需要小數年齡(等同於 YEARFRAC) | Excel DATEDIF / YEARFRAC |
| 同時需要週、天、月的總計 | 年齡計算工具 |
| 多列資料中的 2 月 29 日生日 | 年齡計算工具 |
| 出生日期欄位變動時的批次重算 | Excel DATEDIF 公式 |
| 在手機上快速查詢,沒有開啟試算表 | 年齡計算工具 |
| 以固定參考日期(學年開始)計算年齡 | 搭配 DATE() 的 Excel DATEDIF |
這個表格描述的是典型的取捨,而非放諸四海皆準的規則。對於臨時性的問題、邊緣情況以及在任何裝置上的快速查詢,瀏覽器工具會更快。對於需要在試算表規模下工作、且答案必須存在於儲存格中、並隨著出生日期欄位的變動而更新的情況,DATEDIF 公式能留在活頁簿內部,讓工作流程保持自足。年齡計算工具同時也是一個快速的健全性檢查——如果你手寫的 Excel 公式與計算工具的結果不一致,差異幾乎都來自上述三種邊緣情況之一,而計算工具的逐月借用邏輯與 date-fns 的方法一致。