生年月日から満年齢を算出

「満年齢」は「年」の差し引きだけではダメです!
「年齢」をデータ上に持つのは弊害です。   個人情報ではありますが「年齢」をデータとして持ってしまうと、1年もすれば「役に立たない古いデータ」になってしまいます。
従業員とか会員とかで個人データを登録するのであれば「年齢」ではなく「生年月日」を登録するように項目を設定すれば、「年齢」はそのデータを参照する時点で再計算ができます。





サンプルを用意しました。

生年月日から満年齢を算出
(画像をクリックすると、このページのサンプルがダウンロードできます)

「満年齢の算出」ですから、まず「生年月日」を入力して確認していただく必要があります。
ダウンロードしたサンプル(03_DATEDIF1N.xlsx)を開いて、「生年月日」となっているB2セルにご自分の「生年月日」を入力してみて下さい。
Excelは日付書式のセルには「和暦」でも入力ができます。「和暦」で入力する場合は「元号ymd日」の形式で入力する必要があります。
入力後は和暦入力であってもB2セルは西暦表示になってしまうので、その下のB3セルに確認用に和暦表示されるようにしてあります。



さらにその下のB5セルには「算出日」として、操作している本日の日付が表示されるようになっています。



これによってD列に「年齢」が表示されるのですが、想定される4つの方法を使っています。
「満年齢」というのは「算出日」が「生年月日」の「月日」の前後どちらかによって値が異なることになるので、単なる「年」の差し引きではならないということです。



なお、日本の法律では「年齢は誕生日の前日に加算する」となっているそうですが、このページのサンプルではこの対応は行なっていません。 一般的な「慣習」としての算出方法と捉えて下さい。 「前日に加算する」に対応する場合は「算出日」に1を加算して1日進めて下さい。



このあたりを考慮して以下の説明をご覧下さい。

D2、D3セルは「年の差し引き」によるものです。
D2セルの数式は、

 =YEAR($B$5)-YEAR($B$2)
となっていて、「算出日」側が1月になった時点で1加算されてしまいます。
これでは誕生月より前に年齢が加算されてしまうので、D3セルの数式は、

 =IF(MONTH($B$5)>=MONTH($B$2),YEAR($B$5)-YEAR($B$2),YEAR($B$5)-YEAR($B$2)-1)
として、誕生月より前は「1」を差し引く対応を入れたものです。



いずれにしても厳密には正しくありません。
「年齢」を気にする方は誕生月であっても誕生日より前に歳は取りたくないでしょう。
それに数式が長くなるのに「正しくない」のでは困ります。 「算出日」の月が誕生月だったら、などの対応も含めたらさらに相当長い数式になってしまいます。

D4セルは「DATEDIF関数」によるものです。
「満年齢」の算出には「DATEDIF関数」をお勧めします。数式も、

 =DATEDIF($B$2,$B$5,"Y")
このように簡単です。



関数概略説明
 DATEDIF関数  2つの日付の間の日数、月数、または年数を計算します。引数は以下の通りです。
 ① 期間開始日
 ② 期間終了日
 ③ 単位(返される情報の種類)
種類の説明
"Y"  期間の年数 ※「満年齢」に使用
"M"  期間の月数
"D"  期間の日数
"MD"  開始日から終了日までの日数(日付の月数および年数は無視)
"YM"  開始日から終了日までの月数(日付の日数および年数は無視)
"TD"  開始日から終了日までの日数(日付の年数は無視)



これだけで「満年齢」は正しく算出されます。



但し、「DATEDIF関数」の成り立ちには若干の問題がありました。
そもそも「DATEDIF関数」は古くからある関数ですが「Lotus 1-2-3の古いブックをサポートするために作られたもの」と説明されており、 「数式ガイド」や「関数ウィザード」にも出てきません。
古いバージョンのExcelのヘルプでは「非サポート」であったり、 「うるう年などで正確を期するためにはオプションの詳細設定にある[1904年から計算する]にチェックを付ける必要がある」などと明記されていたのですが、 現在のヘルプでは「使用を推奨しない」というような説明はされていません。 (単位の"MD"については誤った結果を返すことがあるという説明がありますが、「満年齢」では"Y"しか使用しません)

D5セルは「YEARFRAC関数」によるものです。
前項の「DATEDIF関数」がマイクロソフトの「非サポート」という状況があったため、ネット上では「YEARFRAC関数」が「DATEDIF関数」の代替関数だという記事を見かけます。 しかし、現在のヘルプ説明では「DATEDIF関数」の「非推奨」「将来に削除予定」とか、「YEARFRAC関数」の「推奨」「後継」といった記述はありません。



一般的な「満年齢」の算出ではどちらでも問題はないようなのでサンプルに追加しました。

 =INT(YEARFRAC($B$2,$B$5,1))



関数概略説明
 YEARFRAC関数  開始日と終了日の間の全日数が1年間に対して占める割合を計算します。引数は以下の通りです。
 ① 期間開始日
 ② 期間終了日
 ③ 基準(省略時は0)
基準日数(月/年)
0  30日/360(NASD方式)
1  実際の日数/実際の年日数
2  実際の日数/360
3  実際の日数/365
4  30日/360(ヨーロッパ方式)
 INT関数  指定された数値を最も近い整数に切り捨てます。引数は該当する数値です。



YEARFRAC関数」のヘルプの説明では「特定の期間に割り当てられる年利または年債の割合を求めることができます」と追記されているように、本来は金融系に用意された関数のようです。 戻り値に小数が含まれてしまうため、「満年齢」には小数部切り捨てのため「INT関数」を併用します。



なお、「DATEDIF関数」と「YEARFRAC関数」を厳密に比較したサイトがあって、その解説を見ると、 「満年齢」の算出においては「YEARFRAC関数」の方は「うるう年」の処理で法的には誤りが発生することがあるということです。



「満年齢」の算出に限って見れば「DATEDIF関数」を用いた方が良いということだと思います。