Excelで生年月日から年齢を自動計算したい、病院でよく使う〇歳△ヶ月表記にしたい、を解決できる記事です。
#DATEDIF関数を使う方法=DATEDIF(誕生日,TODAY(),"Y")&"歳"
表示例:30歳=DATEDIF(誕生日,TODAY(),"Y")&"歳"&DATEDIF(誕生日,TODAY(),"YM")&"ヶ月"
表示例:30歳8ヶ月
※誕生日には、セルを指定する。
//法律年齢に合わせる
法律年齢に合わせたい方は、TODAY()
をTODAY()-1
に置き換えてください。日本の法律年齢では、誕生日の前日に歳をとります。このページでは、一般の慣習に合わせて誕生日当日に歳をとる想定で数式例を示しています。
必ずテストしてから使ってください!
(年齢早見表を見ながらのテスト推奨)
Excelのバージョンや設定によっては、正しくない計算結果が出ることがあります。
しかしながら、DATEDIF関数は公式にサポートされておらず、Excel 2010以前のバージョンでは使用することができません。(そんなに古いバージョンのExcelを使われている方はいないと思いますが)
大変長い数式になりますが、公式にサポートされた関数のみで作った作例も最後にお示ししたいと思います。
それでは、私の失敗談も交えて解説していきます。
DATEDIF関数を使う方法
DATEDIF関数を使って、以下の図のような患者一覧シートに年齢を表示させてみました。

DATEDIF関数の書式
DATEDIF関数の書式は以下の通りです。
DATEDIF(開始日,終了日,単位)
単位 | 戻り値 |
---|---|
“Y“ | 期間の年数です。 |
“M“ | 期間の月数です。 |
“D“ | 期間の日数です。 |
“MD“ | 開始日から終了日までの日数です。 日付の月数および年数は無視されます。 重要: 制限事項があるため、”MD” 引数の使用はお勧めしません。 以下の既知の問題のセクションを参照してください。 |
“YM“ | 開始日から終了日までの月数です。 日付の日数および年数は無視されます。 |
“YD“ | 開始日から終了日までの日数です。 日付の年数は無視されます。 |
これだからExcel関数は嫌いなんだよ~。単位って何?戻り値って何?という声が聞こえてきそうですが、安心してください。
今回は、“Y”と”YM”だけ使えれば大丈夫。
それでは実際の数式を見てみましょう。
〇歳を表す数式の例(D2)
=DATEDIF(C2,TODAY(),"Y")&"歳"
ここで、”Y”が出てきました。
〇歳△ヶ月を表す数式の例(E2)
=DATEDIF(C2,TODAY(),"Y")&"歳"&DATEDIF(C2,TODAY(),"YM")&"ヶ月"
ついで、”YM”が出てきました。
本当に2つだけです♪
もし、複数の患者さんを処理したいときは、このようにオートフィルを使ってください。

仕上がりの例1
このように仕上がりました。

DATEDIF関数を使う方法のまとめ
#DATEDIF関数を使う方法=DATEDIF(誕生日,TODAY(),"Y")&"歳"
表示例:30歳=DATEDIF(誕生日,TODAY(),"Y")&"歳"&DATEDIF(誕生日,TODAY(),"YM")&"ヶ月"
表示例:30歳8ヶ月
※誕生日には、セルを指定する。
//法律年齢に合わせる
法律年齢に合わせたい方は、TODAY()
をTODAY()-1
に置き換えてください。日本の法律年齢では、誕生日の前日に歳をとります。このページでは、一般の慣習に合わせて誕生日当日に歳をとる想定で数式例を示しています。
年齢計算に関する法律について知りたい方はこちら
DATEDIF関数を使わない方法(応用編)
ここからは、蛇足ですが興味のある方はどうぞ。
公式サポートの関数のみで数式を組んでみました。
私は、DATEDIF関数の代わりとしてよく紹介されるYEARFRAC関数は、うるう年の満年齢日に誤りが生じるのでオススメしません。
この事は以下のサイトさんが詳しく説明されています。

〇歳を表す数式の例(D2)
=YEAR(TODAY())-YEAR(C2)+IF(DATE(YEAR(C2),MONTH(TODAY()),DAY(TODAY()))>=C2,0,-1)&"歳"
先ほどとは違い、複雑な式になっています。
私の失敗談
上記の数式を使って大失敗をしたことがあります。
某サイトを参考にしながらExcelデータを作成したのですが、例の0と-1の位置が逆になっていることに気が付きませんでした。
その結果、誕生日を迎えているのに年をとらず、まだ誕生日を迎えていないのに1歳多く表示されてしまいました。
実際このことで患者さんからクレームが入った苦い経験があります。
皆さんも、もし使われる場合は入念なテストをおすすめします。
何でも信じてそのまま使っちゃダメですね。
△ヶ月を表す数式の例(E2)
=IF(DATE(YEAR(C2),MONTH(TODAY()),DAY(TODAY()))>=C2,
IF(DAY(TODAY())>=DAY(C2),MONTH(TODAY())-MONTH(C2),MONTH(TODAY())-MONTH(C2)-1),
IF(DAY(TODAY())>=DAY(C2),12-(MONTH(C2)-MONTH(TODAY())),11-(MONTH(C2)-MONTH(TODAY()))))&"ヶ月"
長くなってしまいましたので、〇歳の部分は削り、△ヶ月のみを表しています。
仕上がりの例2

1つのセルに長い数式が入ります。
仕上がりの例3
もし、〇歳△ヶ月と表示したい場合は、2つをくっつけて以下の数式になります。
=YEAR(TODAY())-YEAR(C2)+IF(DATE(YEAR(C2),MONTH(TODAY()),DAY(TODAY()))>=C2,0,-1)&"歳"&
IF(DATE(YEAR(C2),MONTH(TODAY()),DAY(TODAY()))>=C2,
IF(DAY(TODAY())>=DAY(C2),MONTH(TODAY())-MONTH(C2),MONTH(TODAY())-MONTH(C2)-1),
IF(DAY(TODAY())>=DAY(C2),12-(MONTH(C2)-MONTH(TODAY())),11-(MONTH(C2)-MONTH(TODAY()))))&"ヶ月"

DATEDIF関数を使わない方法(応用編)のまとめ
DATEDIF関数を使わない方法=YEAR(TODAY())-YEAR(誕生日)+IF(DATE(YEAR(誕生日),MONTH(TODAY()),DAY(TODAY()))>=誕生日,0,-1)&"歳"
表示例:30歳=IF(DATE(YEAR(誕生日),MONTH(TODAY()),DAY(TODAY()))>=誕生日,
IF(DAY(TODAY())>=DAY(誕生日),MONTH(TODAY())-MONTH(誕生日),MONTH(TODAY())-MONTH(誕生日)-1),
IF(DAY(TODAY())>=DAY(誕生日),12-(MONTH(誕生日)-MONTH(TODAY())),11-(MONTH(誕生日)-MONTH(TODAY()))))&"ヶ月"
表示例:8ヶ月
コメント