【この記事について】本記事は 2026年9月24日 時点で、Microsoft の公式サポート情報(記事末尾に出典)を確認し、あわせて Windows 版 Microsoft 365 の Excel(バージョン 16.0・ビルド 20326)で数式を実際に計算して書いています。記事中の計算結果は、特にことわりがない限り 2026年9月24日を「今日」として計算した値です。対象環境:Windows 版の Microsoft 365 の Excel(デスクトップ版)。公式ページの適用先には Excel 2024・2021・2019・2016 なども含まれています。Mac 版・Web 版、またはお使いのバージョンによって、画面の表示や入力候補の出方が異なる場合があります。また、本記事の計算結果はエクセル上の計算であり、法律や各種制度で使う年齢の数え方とは異なる場合があります。制度上の年齢は、それぞれの制度の案内に従ってください。本記事の内容の利用は、ご自身の判断と責任でお願いします。
エクセルで年齢を計算するなら、=DATEDIF(生年月日のセル,TODAY(),”Y”) の1つで足ります。これで「今日の時点で何歳か」という満年齢が出ます。「4月1日時点の年齢」なら TODAY() の部分を基準日に変えるだけ、「46歳4か月」のように月まで出したいなら “YM” を足すだけです。この記事では、そのまま貼って使える数式と、実際に計算して見つけたYEARFRAC 関数で年齢を出すときの落とし穴、#NUM! や「126」のようなおかしな結果の直し方をまとめます。

まずはこれだけ|年齢計算の早見表
A2 セルに生年月日が入っている前提です。やりたいことに合う行の数式を、年齢を出したいセルに貼ってください。
| やりたいこと | 数式 | 結果の例(生年月日 1980/5/15) |
|---|---|---|
| 今日の時点の満年齢 | =DATEDIF(A2,TODAY(),”Y”) | 46 |
| 決まった日(E1 セル)の時点の年齢 | =DATEDIF(A2,$E$1,”Y”) | 45(E1 が 2026/4/1 のとき) |
| 「○歳○か月」で表示 | =DATEDIF(A2,TODAY(),”Y”)&”歳”&DATEDIF(A2,TODAY(),”YM”)&”か月” | 46歳4か月 |
| 勤続年数「○年○か月」 | =DATEDIF(入社日,基準日,”Y”)&”年”&DATEDIF(入社日,基準日,”YM”)&”か月” | 11年5か月(2015/4/1 入社・2026/9/30 時点) |
| 年代(40代など) | =INT(B2/10)*10&”代” | 40代(B2 が年齢のとき) |
ここから先は、1つずつ仕組みと注意点を見ていきます。
手順1|今日の時点の満年齢を出す(DATEDIF+TODAY)
DATEDIF(デイト・ディフ)関数は、2つの日付のあいだが「何年・何か月・何日」あるかを数える関数です。Microsoft の公式ページでも、年齢を計算する数式で利用すると便利だと紹介されています。
数式の形
=DATEDIF(開始日,終了日,”単位”)
- 開始日:生年月日のセル(例:A2)
- 終了日:いつの時点の年齢か。今日なら TODAY()
- 単位:“Y” で「満何年」を数えます。ダブルクォーテーションで囲むのを忘れないでください
入れ方
- 年齢を出したいセル(例:B2)を選びます。
- =DATEDIF(A2,TODAY(),”Y”) と入力して Enter を押します。
- B2 の右下の小さな四角(フィルハンドル)をダブルクリックすると、下の行にもまとめてコピーされます。
入力の途中で出る関数の候補に DATEDIF が見当たらなくても、数式を最後まで入力して Enter を押せば計算されます(本記事の環境で、この数式の計算結果を確認しています)。
誕生日の前日・当日・翌日で確かめた結果
「今日」を 2026/9/24 として、誕生日の前後で結果がどう変わるかを実際に計算しました。
| 生年月日 | =DATEDIF(A2,TODAY(),”Y”) | 状態 |
|---|---|---|
| 1980/5/15 | 46 | 今年の誕生日はもう過ぎた |
| 1980/9/24 | 46 | 今日が誕生日 |
| 1980/9/25 | 45 | 誕生日は明日(まだ45歳) |
誕生日の当日から1つ上がり、誕生日の前日までは前の年齢のまま。名簿でふだん使う「満年齢」の数え方と同じ結果になります。
なお、TODAY 関数はブックを開いたときなどに再計算されるので、明日開けば明日の時点の年齢に変わります。「提出した日の年齢」を残しておきたいときは、次の手順2のように基準日を固定してください。
手順2|「4月1日時点」など決まった日の年齢を出す
学年・保険・名簿の締め日など、「○月○日の時点で何歳か」を出したい場面は多いはずです。TODAY() の部分を基準日に変えるだけです。
基準日をセルに入れておく方法(おすすめ)
- 空いているセル(例:E1)に基準日を入力します。例:2026/4/1
- 年齢のセルに =DATEDIF(A2,$E$1,”Y”) と入力します。
- 下の行へコピーします。
$E$1 のように $ を付けておくと、下へコピーしても基準日のセルがずれません。基準日を変えたくなったら E1 を書き換えるだけで、全員の年齢がまとめて変わります。
数式の中に直接 =DATEDIF(A2,”2026/4/1″,”Y”) と書いても計算されました。ただ、あとで基準日を変えるときに全部の数式を直すことになるので、セルに置く方法のほうが扱いやすいです。
4月1日生まれ・4月2日生まれで確かめた結果
| 生年月日 | 基準日 | 結果 |
|---|---|---|
| 1990/4/1 | 2026/4/1 | 36 |
| 1990/4/2 | 2026/4/1 | 35 |
DATEDIF は「誕生日の当日に1つ上がる」数え方です。学年の区切りのように、制度によって年齢の数え方に独自の決まりがある場合は、エクセルの結果をそのまま当てはめず、その制度の案内を確認してください。
手順3|「○歳○か月」で表示する(単位 “YM”)
単位を “YM” にすると、「満何年」を引いた残りの月数が出ます。”Y” と “YM” を & でつなげば、「46歳4か月」のような表示になります。
=DATEDIF(A2,TODAY(),”Y”)&”歳”&DATEDIF(A2,TODAY(),”YM”)&”か月”
| 生年月日 | 基準日 | 結果 |
|---|---|---|
| 1980/5/15 | 2026/9/24 | 46歳4か月 |
| 1980/9/25 | 2026/9/24 | 45歳11か月 |
| 2000/2/29 | 2025/2/28 | 24歳11か月 |
| 2000/2/29 | 2025/3/1 | 25歳0か月 |
「○日」まで出したいときに “MD” を使わない理由
DATEDIF には日数の端数を出す “MD” という単位もあります。ただ、Microsoft の公式ページでは、”MD” は負の値、ゼロ、または不正確な結果を返すことがあるとして、使用はお勧めしないと書かれています。名簿や書類に載せる年齢は「○歳」か「○歳○か月」までにしておくのが安全です。
手順4|勤続年数も同じ形で出せる
生年月日を入社日に変えれば、そのまま勤続年数になります。
- 勤続年数(満何年):=DATEDIF(入社日のセル,基準日のセル,”Y”)
- 勤続「○年○か月」:=DATEDIF(入社日のセル,基準日のセル,”Y”)&”年”&DATEDIF(入社日のセル,基準日のセル,”YM”)&”か月”
入社日 2015/4/1・基準日 2026/9/30 で計算すると、11年5か月になりました。
ただし、会社の規程で「入社月は1か月と数える」「休職期間は除く」などの決まりがある場合、この数式の結果とは一致しません。規程に合わせた数え方が必要なときは、規程のほうを優先してください。
YEARFRAC で年齢を出すと、誕生日の当日にずれることがある(実測)
年齢の出し方を調べると、DATEDIF のほかに =INT(YEARFRAC(A2,TODAY(),1)) のような YEARFRAC(イヤー・フラク)関数を使う方法も見つかります。YEARFRAC は2つの日付のあいだが「1年の何年分か」を小数で返す関数で、Microsoft の公式ページでは、年利など期間の割合を求める例が挙げられています。
本記事の環境で、DATEDIF と結果が同じになるかを確かめました。1970年からの生年月日と5つの基準日を組み合わせた 14,258 組を計算して比べた結果です。
| 数式 | DATEDIF と違った組 | 違いが出た例 |
|---|---|---|
| =INT(YEARFRAC(A2,基準日,1)) | 7 組 | 生年月日 1980/9/24・基準日 2026/9/24(誕生日の当日)で、DATEDIF は 46、こちらは 45 |
| =INT(YEARFRAC(A2,基準日)) (基準を省略) |
2 組 | 生年月日 2000/2/29・基準日 2025/2/28 で、DATEDIF は 24、こちらは 25 |
基準に 1 を指定した形では、違いが出た7組はすべて誕生日の当日でした。誕生日の当日は年齢が上がる日ですが、組み合わせによっては 45.99… のように1にわずかに届かない値になり、INT で切り捨てると1つ少なくなります。すべての誕生日でずれるわけではない(1990/4/1 生まれ・2026/4/1 時点は正しく 36)ので、名簿をざっと見ただけでは気づきにくいのが困るところです。
基準を省略した形(30日/360日の計算)では、2月29日生まれの人で、まだ誕生日を迎えていない2月28日に1つ上がってしまいました。
満年齢が欲しいときは DATEDIF の “Y” を使い、YEARFRAC は「46.36年」のように小数の年数そのものが欲しいときに使うのが無難です。
「YEAR(TODAY())-生まれ年」との違い
Microsoft の TODAY 関数のページでは、=YEAR(TODAY())-1963 のように、今年の年から生まれ年を引く例が紹介されています。これは説明のとおり「今年の誕生日の時点での年齢」です。まだ誕生日を迎えていない人は、満年齢より1つ多く出ます。
| 生年月日 1980/9/25(今日 2026/9/24) | 結果 |
|---|---|
| =YEAR(TODAY())-YEAR(A2) | 46(今年の誕生日の時点の年齢) |
| =DATEDIF(A2,TODAY(),”Y”) | 45(今日の時点の満年齢) |
エラー・おかしな結果が出たときの直し方
本記事の環境で、実際に起きた結果をもとにまとめています。
| 出た結果 | 原因 | 直し方 |
|---|---|---|
| #NUM! | 生年月日(開始日)が基準日より後になっている | 生年月日の入力ミス(未来の日付・年の打ち間違い)を確認する |
| #VALUE! | 生年月日が「1985.12.1」のようなドット区切りで、日付として読めていない | 後述の置換で「/」区切りに直す |
| 生年月日が空欄の行に「126」などの数字が出る | 空欄が「0」として扱われ、1900年を起点に計算されている | =IF(A2=””,””,DATEDIF(A2,TODAY(),”Y”)) で空欄のときは何も出さない |
| 「1900/2/14」のような日付や ##### が出る | 年齢のセルに日付の表示形式が付いている | [ホーム] タブの表示形式を[標準]にする |
| 日付が変わっても年齢が変わらない | 計算方法が「手動」になっている | [ファイル] →[オプション]→[数式]で計算方法を[自動]にする |
#NUM! になる
Microsoft の公式ページにあるとおり、DATEDIF は開始日が終了日より大きいと #NUM! になります。年齢の計算で起きるのは、生年月日に未来の日付が入っているときです。2030年のように年を打ち間違えていないかを見てください。エラーを見せたくないだけなら =IFERROR(DATEDIF(A2,TODAY(),”Y”),””) で空欄にできますが、入力ミスが隠れてしまうので、先に元のデータを直すほうをおすすめします。
#VALUE! になる(ドット区切りの生年月日)
本記事の環境では、生年月日が文字として入っていても、「1985/12/1」「1985-12-01」「S60.12.1」「昭和60年12月1日」は年齢が計算されました。いっぽう「1985.12.1」のようなドット区切りは #VALUE! になりました。
- 生年月日の列を選びます。
- Ctrl + H で[置換]を開きます。
- [検索する文字列]に .(ピリオド)、[置換後の文字列]に /(スラッシュ)を入れて[すべて置換]を押します。
本記事の環境では、この置換のあと年齢が計算されるようになりました。日付が5桁の数字になる、勝手に別の日付に変わるなど、日付そのものの表示がおかしいときは、次の記事で原因ごとに直し方をまとめています。

空欄の行に「126」が出る
生年月日がまだ入っていない行まで数式をコピーすると、空欄は「0」として扱われるため、1900年を起点にした年数(2026年なら 126)が出ます。空欄のときは何も表示しないように、IF 関数で包んでおきます。
=IF(A2=””,””,DATEDIF(A2,TODAY(),”Y”))
年齢が「1900/2/14」のような日付になる
日付の列をコピーして年齢の列を作ったときなどに、年齢のセルに日付の表示形式が残っていると、45 という年齢が「1900/2/14」のように見えます。列の幅が狭いと ##### になります。年齢の列を選んで、[ホーム] タブの表示形式を[標準]に戻してください。
「歳」を付けたいときは、表示形式で付ける
=DATEDIF(A2,TODAY(),”Y”)&”歳” のように文字をつなげると、結果は文字列になります。本記事の環境で確かめたところ、ISNUMBER 関数で「数値ではない」と判定されました。これだと、年齢で並べ替えたり平均を出したりするときに困ります。
見た目だけ「45歳」にしたいなら、数式は =DATEDIF(A2,TODAY(),”Y”) のままにして、表示形式で付けます。
- 年齢の列を選んで Ctrl + 1 を押します。
- [表示形式]タブの[ユーザー定義]を選びます。
- [種類]に 0″歳” と入力して[OK]を押します。
本記事の環境では、表示は「45歳」、中身は数値のまま(ISNUMBER が TRUE)になりました。
よくある質問
Q. 関数の一覧から DATEDIF が見つかりません。使えないのですか?
A. 一覧や入力候補で見当たらなくても、セルに直接 =DATEDIF(A2,TODAY(),”Y”) と最後まで入力すれば計算されます。本記事の環境でも、この数式で計算結果を確認しています。Microsoft の公式ページには、DATEDIF は Lotus 1-2-3 の古いブックをサポートするために用意されていると書かれています。
Q. 生年月日が和暦で入っていても計算できますか?
A. 本記事の環境では、日付として入力された和暦はもちろん、文字で入った「昭和60年12月1日」「S60.12.1」も計算されました。ただし、入力のしかたによって日付として読めない場合もあるので、#VALUE! が出たら、その行の入力の形を確認してください。表示だけ和暦にしたいときは、=TEXT(A2,”ggge年m月d日”) で「昭和55年5月15日」のような表示にできました。
Q. 2月29日生まれの人は、平年だといつ年齢が上がりますか?
A. DATEDIF で計算すると、平年は3月1日に上がりました(2000/2/29 生まれは、2025/2/28 時点で 24、2025/3/1 時点で 25)。これはエクセルの計算結果です。法律や制度のうえでの年齢の扱いが必要なときは、その制度の案内を確認してください。
Q. 年齢から「40代」「50代」を出したいです。
A. 年齢が B2 にあるなら =INT(B2/10)*10&”代” で「40代」と表示できました。集計に使うなら、「代」を付けずに =INT(B2/10)*10 のように数値のまま出しておくと、ピボットテーブルや COUNTIF で数えやすくなります。
Q. 「46.36歳」のように小数で出したいです。
A. そのときは YEARFRAC が向いています。=ROUND(YEARFRAC(A2,TODAY(),1),2) のように ROUND 関数で桁をそろえてください。ただし、この値を切り捨てて満年齢として使うと、前述のとおり誕生日の当日にずれることがあります。
まとめ
- 満年齢は =DATEDIF(A2,TODAY(),”Y”)。誕生日の当日に1つ上がります。
- 決まった日の時点なら、基準日をセルに置いて =DATEDIF(A2,$E$1,”Y”)。
- 「○歳○か月」は “Y” と “YM” を & でつなぐ。”MD” は使わない。
- INT(YEARFRAC(…)) は誕生日の当日などに1つずれる組み合わせがあった。満年齢には使わない。
- #NUM! は生年月日の入力ミス、空欄の「126」は IF で包む、日付に見えたら表示形式を[標準]に。
- 「歳」を付けるなら、数式ではなく表示形式 0″歳” で。
年齢の計算は、1本の数式を覚えてしまえば、名簿が何百行あっても一瞬で終わります。まずは手元の名簿で、1行だけ試してみてください。うまくいったら、あとは下へコピーするだけです。
次に読む



出典(2026年9月24日 確認)
DATEDIF 関数|Microsoft サポート
https://support.microsoft.com/ja-jp/excel/functions/datedif-function
YEARFRAC 関数|Microsoft サポート
https://support.microsoft.com/ja-jp/excel/functions/yearfrac-function
TODAY 関数|Microsoft サポート
https://support.microsoft.com/ja-jp/excel/functions/today-function


コメント