Excelで生年月日から年齢を計算したいときはないでしょうか。
けど、そんな中で悩むことは、
・DATEDIF関数を使いたいのに、関数候補に出てこない
・誕生日がまだ来ていない人を、1歳多く数えてしまう
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
完成イメージ
生年月日から年齢を出したいときは、今日(TODAY関数)と生年月日の差を取れば求められます。
今回は
・生年月日を入れるだけで、満年齢が自動で出る方法3選
をゴールにします。
3つとも同じ満年齢になりますが、数式の書き方と向いている場面が少しずつ違います。
なお、3つの方法の使い分け(比較表)や、うまくいかないときの対処法(トラブルシュート)もあわせてご紹介します。
早速実装して試してみましょう!

上の画像が完成形です。生年月日(B列)を入れるだけで、満年齢が自動で計算されます。誕生日を迎えると自動で1つ増えます。
もくじ
STEP1. 元データを用意する
まずは年齢を出したい名簿を用意します。
A列が氏名、B列が生年月日です。
生年月日は「1985/5/20」のようにスラッシュ区切りで入力すると、Excelが日付として認識してくれます。
C列からE列に満年齢(3つの方法)、F列に数え年を入れていきます。
今回は10人分で、誕生日が今年すでに来ている人と、まだ来ていない人を混ぜています。

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。
| 氏名 | 生年月日 | 満年齢 DATEDIF |
満年齢 YEAR補正 |
満年齢 YEARFRAC |
数え年 |
|---|---|---|---|---|---|
| 佐藤 花子 | 1985/5/20 | ||||
| 鈴木 一郎 | 2000/1/1 | ||||
| 高橋 美咲 | 1990/12/31 | ||||
| 田中 健太 | 1978/8/15 | ||||
| 伊藤 さくら | 2003/4/1 | ||||
| 渡辺 大輔 | 1995/10/10 | ||||
| 山本 由美 | 1988/2/28 | ||||
| 中村 翔太 | 2001/6/30 | ||||
| 小林 あゆみ | 1992/11/5 | ||||
| 加藤 拓也 | 1999/3/25 |
※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。
方法① DATEDIF関数で満年齢を出す
もっともカンタンなのが、DATEDIF関数を使う方法です。
C2セルに =DATEDIF(B2,TODAY(),”Y”) と入力します。
開始日が生年月日、終了日が今日(TODAY())、最後の “Y” が「満年数」を表します。
C11セルまでコピーすれば、全員の満年齢が一度に出ます。
まずは誕生日がもう過ぎている「佐藤 花子」さんに注目してください。
1985年生まれなので、満41歳になっています。

数式はどのセルに入れる?
セルを選んで、数式バーに直接入力するだけです。
実際の入力画面がこちらです。
入力中は関数の引数のヒントが表示されるので、引数の順番を確認しながら進められます。
DATEDIFは関数候補に出てこないので、手入力してください。

方法② DATEDIFを使わずYEAR関数の差+補正で出す
DATEDIFは関数候補に出てこないので、使いたくない方もいるかもしれません。
そんなときは YEAR関数の差で代用できます。
D2セルに次の数式を入力します。
=YEAR(TODAY())-YEAR(B2)-IF(DATE(YEAR(TODAY()),MONTH(B2),DAY(B2))>TODAY(),1,0)
前半の =YEAR(TODAY())-YEAR(B2) だけでは、誕生日がまだ来ていない人を1歳多く数えてしまいます。
そこで後半の IF(…,1,0) で、今年の誕生日がまだ来ていなければ1を引いています。
これでDATEDIFを使わなくても、正しい満年齢になります。
誕生日がまだの「高橋 美咲」さんも、①と同じ満35歳になりました。

数式はどのセルに入れる?
少し長い数式ですが、前半と後半に分けて見ると分かりやすくなります。
実際の入力画面がこちらです。

方法③ YEARFRAC関数で端数を切り捨てて出す
年齢を小数でも扱いたいときは、YEARFRAC関数が便利です。
E2セルに =INT(YEARFRAC(B2,TODAY(),1)) と入力します。
YEARFRACは、2つの日付の間が「何年分あるか」を小数で返します。
最後の 1 は「実際の日数で数える」という指定です。
そのままでは小数になるので、INT関数で端数を切り捨てて満年齢にしています。
小数のまま使いたいときは、INTを外せばOKです。

数式はどのセルに入れる?
実際の入力画面がこちらです。
INTで囲むだけなので、数式はとてもシンプルですね。

おまけ. 数え年も出してみる
F2セルに =YEAR(TODAY())-YEAR(B2)+1 と入力すると、数え年が出せます。
数え年は、生まれた年を1歳とし、元日を迎えるたびに1つ増える数え方です。
そのため満年齢より1つ(誕生日前なら2つ)大きくなることがあります。
七五三や厄年など、古くからの風習で使われる年齢です。
VBAで年齢を一括計算する
人数が多いときや、毎回同じ作業をするときは、VBAで一括計算するのがラクです。
Alt+F11でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。
Sub 年齢を一括計算()
Dim r As Long
For r = 2 To 11
Cells(r, 3).Formula = "=DATEDIF(B" & r & ",TODAY(),""Y"")"
Next r
End Sub
実行すると、C2セルからC11セルまで満年齢が一瞬で入ります。
ボタンに登録しておけば、クリック1つで計算できるようになります。
1つだけ覚えるなら DATEDIF、使いたくないときは YEARの差+補正、小数がほしいときは YEARFRAC と使い分けてみてくださいね。
数式が長く見えても、やっていることは同じなのでカンタンですね。
3つの方法の比較
3つの方法の特徴を表にまとめました。
出したい年齢の形に合わせて選ぶと迷いません。
| 方法 | 数式 | 向いている場面 | 注意点 |
|---|---|---|---|
| ① DATEDIF | =DATEDIF(B2,TODAY(),”Y”) | 満年齢をいちばんカンタンに出したい | 関数候補に出ないので手入力。スペルに注意 |
| ② YEAR差+補正 | =YEAR(TODAY())-YEAR(B2)-IF(…,1,0) | DATEDIFを使わずに満年齢を出したい | 数式が長い。補正のIFを忘れると1歳多く出る |
| ③ YEARFRAC | =INT(YEARFRAC(B2,TODAY(),1)) | 年齢を小数でも扱いたい | INTを外すと小数のまま。四捨五入はROUND |
| おまけ 数え年 | =YEAR(TODAY())-YEAR(B2)+1 | 七五三・厄年など数え年がほしい | 満年齢より1〜2大きくなる |
満年齢を出すなら DATEDIFの”Y” がいちばんカンタンです。
DATEDIFを使いたくないときは YEARの差+IF補正、
小数で扱いたいときは YEARFRAC と使い分けましょう。
数え年は =YEAR(TODAY())-YEAR(生年月日)+1 で求められます。
うまくいかないときの対処法(トラブルシュート)
実際に試すと、思ったように動かないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。
| 症状 | 原因 | 対処 |
|---|---|---|
| DATEDIFが関数候補に出ない | 古い互換関数で、入力候補に表示されない | 手入力する。スペルは DATEDIF(DATEFIFではない) |
| 誕生日前なのに1歳多く出る | YEARの差だけでは誕生日の補正がない | IFで補正を入れる/DATEDIFの “Y” を使う |
| 生年月日が文字列で認識されない | 「1985.5.20」など日付以外の形式で入力している | =DATEVALUE() で日付に変換する/「1985/5/20」形式で入力し直す |
| TODAY()が開くたびに変わる | 基準日が常に「今日」になってしまう | 固定したいときは日付を手入力する(Ctrl+; で今日の日付を入力できます) |
| 年齢が小数で出る | YEARFRACの結果をそのまま使っている | INT で切り捨て、ROUND で四捨五入する |
| #VALUE! になる | 生年月日が文字列、または空欄になっている | 生年月日を日付に直す。空欄を隠すなら =IFERROR(…,””) を使う |
関数の説明
今回使う3つの関数の概要です。
どれも日付の計算でよく使う関数なので、違いを押さえておきましょう。
DATEDIF関数(デイトディフ)
| 書式 | =DATEDIF(開始日, 終了日, 単位) |
|---|---|
| できること | 開始日から終了日までの期間を、指定した単位で返します。 |
| 戻り値 | 単位に応じた数値(年数・月数・日数) |
| こんなときに | 年齢や勤続年数など、満年数で出したいとき。 |
| 注意 | 関数候補に出ないため手入力が必要です。単位 “Y” は満年数を表します。 |
=DATEDIF(B2, TODAY(), "Y")
YEARFRAC関数(イヤーフラック)
| 書式 | =YEARFRAC(開始日, 終了日, [基準]) |
|---|---|
| できること | 2つの日付の間が何年分あるかを小数で返します。 |
| 戻り値 | 年数(小数) |
| こんなときに | 年齢を小数で扱いたいとき。INT で囲めば満年齢になります。 |
| 注意 | 第3引数の基準は 1(実際の日数)を指定します。省略すると1ヶ月を30日として計算されます。 |
=INT(YEARFRAC(B2, TODAY(), 1))
TODAY関数(トゥデイ)
| 書式 | =TODAY() |
|---|---|
| できること | 今日の日付を返します。引数はありません。 |
| 戻り値 | 今日の日付(シリアル値) |
| こんなときに | 基準日を常に「今日」にしたいとき。=DATEDIF(B2, TODAY(), “Y”) でいつでも最新の年齢になります。 |
| 注意 | 開くたび・日が変わるたびに値が変わります。固定したいときは使わないでください。 |
=TODAY()
完成
C列に満年齢が、F列に数え年が並びました。
3つの方法のどれで出しても、同じ満年齢になっています。
思ったとおりに動きましたか?
生年月日を書き換えると満年齢も自動で更新され、誕生日を迎えると1つ増えます。
見出しに▼ボタンを付けておけば、年齢での並べ替えもすぐできます。

さいごに
いかがでしょうか。
今回は、
についてまとめました。
まずは今回のサンプル名簿で、ぜひ一度試してみてください。
生年月日を入れるだけで年齢が自動で出るので、名簿や会員管理の手計算がなくなりますよ。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。














コメントを残す