要從出生日期取得精確的「年、月、日」年齡,使用 Excel 的 DATEDIF 函數搭配 "Y"、"YM" 與 "MD" 三種單位——包裝在同一條公式中——所得到的結果,會與可信賴的日曆程式庫一致;而瀏覽器中免費的 年齡計算機在你輸入日期的瞬間,也會回傳相同的答案。Excel 中的年齡運算之所以容易讓人出錯,是因為 DATEDIF、YEARFRAC,以及熱門的 =INT((TODAY()-A2)/365.25) 捷徑這三種做法看起來都合理,卻會回傳不同的數字。它們的差異來自於各自回答的是不同的問題:經過的完整單位、分數年,或是單純的天數。真實的年齡——填表、標註里程碑、或寫進人事資料的那種——依序是完整的年數、剩下的完整月數、以及剩餘的天數。順序錯誤就會產生「負天數」,例如生日在 31 號而目標月份只有 30 天,或是 2 月 29 日出生的人在平年查詢年齡時。本文接下來會逐一說明真正可用的 Excel 公式、那些默默會出錯的寫法,以及一款可在瀏覽器中用來驗證任何結果的年齡計算機。

how to calculate age in excel using date of birth
how to calculate age in excel using date of birth

真正能從出生日期回傳真實年齡的 Excel 公式

只有三個 Excel 函數能真正從出生日期計算年齡。每個函數回傳的單位不同,而對你需要回答的問題選錯函數,正是所謂的「差一錯誤」悄悄溜進看似正確的試算表的方式。

DATEDIF 是專門用來計算年齡的函數。Microsoft 為了與 Lotus 1-2-3 保持相容性而將它保留在 Excel 中,這也是它從未出現在公式自動完成選項的原因。它接受 start_date、end_date,以及一個 "unit" 代碼:"Y" 代表完整年數,"M" 代表完整月數,"YM" 代表最後一個完整年之後的月數,"MD" 代表最後一個完整月之後的天數,"D" 代表總天數。由於每次呼叫只回傳一個單位,你必須呼叫 DATEDIF 三次,再將各部分串接起來,才能在同一個儲存格中取得年、月、日。

YEARFRAC 回傳的是小數——兩個日期之間佔一年的比例,依據你所選的日數計算慣例(預設是 basis 0,採用美國 30/360 方式,這對生日而言是錯誤的選擇)。使用 basis=1(actual/actual)時,=YEARFRAC(A2, TODAY()) 會以數字形式回傳一個人的年齡(以年為單位),適合乘以某個年度數字(例如保費或福利倍數),但不適合用於在畫面上顯示「這個人幾歲」。

第三個選項是大多數使用者在論壇上找到的捷徑:=INT((TODAY()-A2)/365.25)。它將經過的天數除以 365.25 以吸收閏年的偏移,再捨去小數部分。在生命中的第一年看起來還算正確,但之後就會逐漸偏差——到了 8 歲,結果就已經差了幾週;經過數十年的閏年不規則分佈,差距還會擴大。下表說明每個公式實際上回傳的內容。

FormulaUnit returnedBest forMain catch
=DATEDIF(A2, TODAY(), "Y")Full completed yearsEligibility age, milestone yearsDrops the months and days
=DATEDIF(A2, TODAY(), "M")Full completed monthsBabies and toddlers counted in monthsDrops the years digit
=YEARFRAC(A2, TODAY(), 1)Decimal yearsMultiplying an annual figure by ageDefault basis is wrong for birthdays
=INT((TODAY()-A2)/365.25)Approximate yearsQuick mental shortcutDrifts — 365.25 ≠ real year length

若要在同一個儲存格中同時顯示年、月、日,只有 DATEDIF 能給出明年也不會讓你意外的答案。下一節會展示實際可用的公式。

為什麼 =INT((TODAY()-A2)/365.25) 會在月底默默出錯

這個捷徑公式對於你已活了多少天是正確的,但對「年齡」真正的含意卻是錯的。Excel 確實精確地計算出生日期到 TODAY() 之間的每一天。除以 365.25 雖然是為了吸收閏年偏移,但仍有兩件事會出錯。

首先,閏年的修正只是近似的。真正的閏年遵循格里高利曆規則:能被 4 整除的年份是閏年,但世紀年必須也能被 400 整除——因此 2000 年是閏年,而 1900 與 2100 年都不是。365.25 這個數字假設每四年剛好出現一次閏年且沒有例外,因此這個公式每過一個世紀就會偏差一天。到了 50 歲,結果已經明顯偏離真正的生日計算。

其次,這個公式不知道「生日」是什麼。它將每個 365.25 天的區塊視為可以互換,忽略了 3 月 31 日出生的人在出生當天是「0 歲」,直到隔年 3 月 31 日才「1 歲」,依此類推。跨越月份邊界時,這點最為關鍵。1 月 31 日出生的人在 2 月 31 日並不算 1 個月大——這個日期根本不存在。真正的年齡運算會借用 2 月實際天數(平年 28 天、閏年 29 天),落在 2 月 28 日或 2 月 29 日。套用後,1 月 31 日 → 3 月 1 日剛好是一個月又一天,而不是零個月又二十九天。

如果你是 2 月 29 日出生,問題更為明顯——你的實際生日每四年才會出現一次。在歐洲大部分地區與許多法律體系中,你的生日在平年是觀察在 2 月 28 日,所以你每年都還是會增加一歲,而不是每四年才增加一次。寫得不夠嚴謹的 Excel 公式若只在真正的 2 月 29 日才遞增,會讓你在每四年中的三年裡看起來比實際年齡大一歲。

DATEDIF 與年齡計算機能避開這些問題的方法,是從出生日期逐步往前推:加上完整的年,直到再多一年會超過目標日期;再加上完整的月,直到再多一個月會超過;最後計算剩下的天數。當今天的日期在當月早於出生日期時,計算會借一個月,並加上該月實際的天數——28、29、30 或 31 天,絕不會是固定的 30 天。以這個順序進行,可確保每個值都不是負數,並與身分證件和正式表格上的年齡表述方式一致。

設定 DATEDIF,在一個儲存格中顯示年、月、日

以下是可用的公式。它假設 A2 儲存格中是一個真正的 Excel 日期(而非文字),並以今天作為參考日期。

  1. 點選出生日期旁的空白儲存格——例如 C2——用來放置年齡字串。
  2. 輸入 = 開始公式。
  3. 輸入 DATEDIF(,然後點選 A2 插入出生日期,接著輸入逗號。
  4. 輸入 TODAY(),讓目前的日期在每次開啟或重新計算活頁簿時自動填入。
  5. 輸入 ,"Y") 結束第一個 DATEDIF——這會回傳完整的年數。
  6. 加入 & " years, " &,然後再呼叫 DATEDIF(A2, TODAY(), "YM"),以取得最後一個完整年之後剩下的月數。
  7. 加入 & " months, " &,然後再呼叫 DATEDIF(A2, TODAY(), "MD"),以取得最後一個完整月之後剩下的天數。
  8. 加入 & " days" 後按 Enter。

C2 中的完整公式如下:

=DATEDIF(A2, TODAY(), "Y") & " years, " & DATEDIF(A2, TODAY(), "YM") & " months, " & DATEDIF(A2, TODAY(), "MD") & " days"

實作範例:若 A2 存放的日期為 March 15, 1990,而今天是 March 10, 2026,此公式會回傳 "35 years, 11 months, 23 days"。你可以從 March 15, 1990 開始逐步驗證——加 35 個完整年會落在 March 15, 2025;從那裡再加 11 個月會落在 February 15, 2026;剩下的 23 天從 February 15, 2026 跑到 March 10, 2026,跨越 2 月進入 3 月。這個運算式使用每個月的實際長度,而且永遠不會產生負數,這正是它能與任何正確撰寫的年齡計算機結果一致的原因。

如果你只想要完整年數的年齡,請將公式替換為 =DATEDIF(A2, TODAY(), "Y")。若要取得以月為單位的總月數(適用於嬰幼兒,或需要以月填寫年齡的表格),請使用 =DATEDIF(A2, TODAY(), "M")。兩者都使用同一個 DATEDIF 呼叫,只是單位不同。若想快速了解這個想法的單行版本,指南 Excel age from date of birth in a quick formula 展示了幾種更精簡的變體。

不使用試算表也能得到相同結果:年齡計算機

有時候手邊沒有試算表——你手上只有一張紙本證件、護照印章,或表單上的一個出生日期欄位。年齡計算機無需撰寫公式、無需建立欄位,就能回傳相同的年、月、日結果。

使用方法是在任何瀏覽器中開啟年齡計算機。在第一個欄位選擇你的出生日期,點選日曆圖示或直接輸入日期——只要輸入有效的日期,你的精確年齡就會立即顯示,不需要按任何按鈕。第二個欄位預設為今天,當你的問題是「我現在幾歲」時,這正是你需要的。若要查詢某個不同時間點的年齡,請將第二個欄位改為任何過去日期(例如文件簽署當天你的年齡)或任何未來日期(例如某個預定活動當天的年齡)。只要第二個欄位變動,結果就會即時更新。

除了年、月、日之外,這個工具還會顯示你的年齡換算為總整月數、總週數、總天數——在表格要求以週填寫年齡(常見於嬰兒)或你需要週年紀念日、保險問題的天數時特別實用。還有即時倒數至你下一個生日的功能,讓你一眼看出今天與下一個生日之間還有多少天。

這個工具內部執行的運算,與 Excel 章節中描述的計算完全相同:先計算完整的年,接著是剩餘的完整月,最後是剩下的天數。當今天的日期在當月早於出生日期時,它會借一個月,並加上該月實際的天數——28、29、30 或 31 天,絕不會是固定的 30 天——因此計算結果能保持非負且一致。所有運算都在你的瀏覽器中執行,所以出生日期永遠不會離開你的裝置;你可以關閉分頁再重新開啟,完全不需要註冊任何帳號。

如果你寧可完全不寫公式,年齡計算機工具無需任何設定,即可提供相同的年、月、日結果,並附上總計面板與下一個生日倒數。

Excel vs. 瀏覽器工具:依情境選擇最適合的方式

兩種做法會得到相同的年、月、日——差別在於使用情境。決定取決於你是否已開啟試算表,以及你是在查詢單一年齡,還是要填入許多列。

如果你需要……使用 Excel 的 DATEDIF使用年齡計算機
同一個活頁簿中數十或數百列的年齡設定一次公式後向下填滿速度很慢——你必須手動輸入每個日期
針對單一出生日期的一次性查詢設定時間比答案本身還長輸入日期,立即讀取結果
在某個自訂參考日期(過去或未來)上的年齡將 TODAY() 替換為存放參考日期的儲存格修改第二個日期欄位
涉及隱私的出生日期若檔案位於本機,資料留在你的電腦上在瀏覽器中執行,絕不上傳到任何地方
12 個月以下嬰兒的總週數將 DATEDIF 以 "D" 包裹後再除以 7已顯示在年數結果的旁邊
交叉驗證剛寫好的公式可用相鄰儲存格並列比較更快——輸入相同日期一次即可讀取

這兩者互補,而非競爭。對於任何存放超過少數幾個出生日期的活頁簿,請建立 DATEDIF 公式——只要一次向下填滿,就能擴充到數千列。針對一次性查詢、在信任公式前驗證剛寫好的公式,以及手邊沒有 Excel 的情況,則開啟年齡計算機。它們共用相同的計算邏輯——先算完整的年,接著是剩餘的完整月,最後是剩下的日,每個月份都依其實際天數計算——這正是它們能逐日吻合的原因。

延伸閱讀:如何在 Excel 中以公式計算日期為一年中的第幾天