エクセルで年齢を計算する方法|DATEDIF関数で生年月日から自動計算
更新日:2026.10.20
社員名簿や会員リスト、PTAの名簿などで「生年月日から年齢を自動で出したい」ときは、エクセル(Excel)のDATEDIF関数を使うのがいちばん簡単です。この記事では、今日時点の年齢、指定した日の年齢、「○歳○か月」の表示、数字8桁の生年月日からの計算、DATEDIFが使えないときの代わりの式まで、例つきで解説します。例の答えは当サイトの年齢計算プログラム(エクセルと同じ考え方で検算済み)で求めています。
基本:今日時点の年齢を出す式
A2セルに生年月日が入っているとき、B2セルに次の式を入れると、今日時点の満年齢が表示されます。
=DATEDIF(A2,TODAY(),"Y")
DATEDIF(デイト・ディフ)は「2つの日付の差」を求める関数で、3つ目の引数"Y"は「満何年か」を意味します。TODAY()はファイルを開いた日の日付なので、毎日開くたびに年齢が自動で更新されます。誕生日の前日までは1歳少なく、誕生日当日から1歳増えるので、履歴書や公的な書類と同じ満年齢になります。
式を入れたら、B2セルの右下の小さな四角(フィルハンドル)をダブルクリックすると、下の行まで一度にコピーできます。
DATEDIF関数の単位一覧
3つ目の引数を変えると、年数以外も求められます。生年月日1990/4/1、基準日2026/4/1の場合の答えです。
| 単位 | 意味 | 式の例 | 答え |
|---|---|---|---|
| "Y" | 満年数(年齢) | =DATEDIF(A2,B2,"Y") | 36 |
| "M" | 満月数 | =DATEDIF(A2,B2,"M") | 432 |
| "D" | 日数 | =DATEDIF(A2,B2,"D") | 13,149 |
| "YM" | 1年未満の月数 | =DATEDIF(A2,B2,"YM") | 0 |
| "MD" | 1か月未満の日数 | =DATEDIF(A2,B2,"MD") | 0 |
なお、マイクロソフトは"MD"について「正しくない結果になる場合がある」と注意を出しています。月末をまたぐ計算では、"MD"の代わりに日数を別の方法で求めるほうが安全です。
指定した日の年齢を出す(4月1日時点など)
保険の加入年齢、学校の学年、会社の年度ごとの集計などでは「4月1日時点の年齢」のように、日付を決めて年齢を出すことがよくあります。その場合はTODAY()の代わりに、基準日を入れたセルを指定します。
=DATEDIF(A2,$E$1,"Y")
E1セルに基準日(例:2026/4/1)を入れ、$記号で固定すると、式をコピーしても全員が同じ基準日で計算されます。式の中に日付を直接書く場合は =DATEDIF(A2,DATE(2026,4,1),"Y") のようにDATE関数を使うと、文字列の日付で起きるエラーを防げます。
次の表は、基準日を2026/4/1にして4人分の年齢を計算した例です。
| 名前 | 生年月日 | "Y"(年齢) | "YM"(か月) | "D"(日数) |
|---|---|---|---|---|
| 社員A | 1990/4/1 | 36歳 | 0か月 | 13,149日 |
| 社員B | 1985/11/23 | 40歳 | 4か月 | 14,739日 |
| 社員C | 2000/2/29 | 26歳 | 1か月 | 9,528日 |
| 社員D | 1972/4/2 | 53歳 | 11か月 | 19,722日 |
社員Cのように2月29日生まれの人は、うるう年でない年は3月1日に年齢が上がる扱いになります。社員Dのように4月2日生まれの人は、4月1日時点ではまだ誕生日前なので、1歳少なく表示されます。
「○歳○か月」と表示する
保育園や幼稚園の名簿、ペットの年齢などでは「○歳○か月」で表したいことがあります。"Y"と"YM"を&でつなげば1つのセルに表示できます。
=DATEDIF(A2,TODAY(),"Y")&"歳"&DATEDIF(A2,TODAY(),"YM")&"か月"
生年月日1990/4/1、基準日2026/4/1なら「36歳0か月」になります。日数まで出したいときは、さらに"MD"と"日"をつなげます。
生年月日が「19900401」のような8桁の数字のとき
システムから出力した名簿では、生年月日が日付ではなく「19900401」という8桁の数字で入っていることがあります。そのままDATEDIFに渡すとエラーになるので、TEXT関数で日付の形に直してから計算します。
=DATEDIF(TEXT(A2,"0000-00-00"),TODAY(),"Y")
もうひとつ、昔から使われている計算方法もあります。「今日の8桁 − 生年月日の8桁」を10000で割り、小数点以下を切り捨てると満年齢になります。
=INT((TEXT(TODAY(),"yyyymmdd")-A2)/10000)
たとえば基準日20260401 − 生年月日19900401 = 360,000、10000で割って切り捨てると36歳です。月と日の大小関係がそのまま引き算に反映されるので、誕生日前・誕生日後も正しく判定できます。当サイトの検算でも、1950年〜2026年のすべての生年月日でDATEDIFと同じ答えになることを確認しています。
DATEDIF関数が見つからないときは
DATEDIFは古い表計算ソフトとの互換性のために残されている関数で、関数の一覧や入力中の候補には表示されません。それでも、正しく入力すれば普通に使えます。「関数が見つからない」と感じたら、候補を使わずに最後まで手で入力してみてください。
Googleスプレッドシートや、Mac版のNumbersでもDATEDIF関数は使えます。どうしても使いたくない場合は、上の「8桁の引き算」の式が代わりになります。YEARFRAC関数で年齢を出す方法もありますが、誕生日の前後で1日ずれることがあるため、年齢にはおすすめしません。
数え年と和暦を表示する
厄年や長寿祝いの名簿では数え年が必要になることがあります。数え年は誕生日に関係なく「今年 − 生まれた年 + 1」なので、次の式で求められます。
=YEAR(TODAY())-YEAR(A2)+1
1990年生まれなら、2026年の数え年は37歳です。生年月日を和暦で表示したいときは、セルの書式設定で「ユーザー定義」に ggge年m月d日 と入れると「平成2年4月1日」のように表示されます。最近のExcelでは、元年を「1年」ではなく「元年」と表示する設定も選べます。
年齢から「20代・30代」の年代を出す
アンケートの集計や会員の分析では、年齢を「20代」「30代」のような年代にまとめると便利です。年齢がB2セルにあるとき、次の式で年代を表示できます。
=INT(B2/10)*10&"代"
たとえば社員Aの36歳なら「30代」になります。年代ごとの人数を数えたいときは、COUNTIFS関数で =COUNTIFS(B:B,">=30",B:B,"<40") のように範囲を指定するか、ピボットテーブルで年代の列を集計します。
よくあるエラーと直し方
- #NUM!:開始日が終了日より後になっています。生年月日と基準日の順番を確認しましょう(DATEDIFは必ず「古い日付, 新しい日付」の順)。
- #VALUE!:生年月日が文字列として入っています。「1990.4.1」のようなドット区切りは日付として認識されないので、スラッシュ区切りに直すか、DATE関数で日付に変換します。
- 年齢が「1900/2/5」のように表示される:セルの書式が日付になっています。書式を「標準」か「数値」に変えると正しく表示されます。
エクセルを使わずに年齢を確認する
1人分だけ確認したいときは、下の計算ツールで生年月日を選ぶほうが早いです。満年齢・数え年・和暦・干支が一度にわかるので、エクセルの式の答え合わせにも使えます。
- 数え年
- 37歳
- 和暦
- 平成2年
- 干支
- 庚午うま年
- 星座
- やぎ座
- 学年
- 社会人など
- 生まれてから
- -
生まれ年ごとの年齢の一覧は年齢早見表で、2つの日付の間の日数(DATEDIFの"D"と同じ値)は日数計算で確認できます。和暦と西暦の変換は和暦西暦変換、満年齢と数え年の違いは数え年とは?の記事で詳しく説明しています。
よくある質問
エクセルで生年月日から年齢を自動計算する式は?
A2セルに生年月日があるとき、=DATEDIF(A2,TODAY(),"Y") で今日時点の満年齢が出ます。ファイルを開くたびに自動で更新されます。
4月1日時点の年齢を出すには?
基準日をE1セルなどに入れ、=DATEDIF(A2,$E$1,"Y") とします。$で固定すると、下の行にコピーしても同じ基準日で計算されます。
DATEDIF関数が候補に出てこないのはなぜ?
DATEDIFは互換性のために残された関数で、関数の候補には表示されません。最後まで手で入力すれば使えます。
「○歳○か月」と表示するには?
=DATEDIF(A2,TODAY(),"Y")&"歳"&DATEDIF(A2,TODAY(),"YM")&"か月" のように、"Y"と"YM"の結果を&でつなげます。
Googleスプレッドシートでも同じ式が使える?
はい。DATEDIF関数、TODAY関数とも同じ書き方で使えます。