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

「満年齢」は「年」の差し引きだけではダメです!

サンプルにはシートが3つあります。


Sheet1は単なる「年の差し引き」です。

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


=YEAR(TODAY())-YEAR($B$2)

「本日の年から生年月日の年を差し引く」という式です。
この画像は2019/03/17時点のものなので、この生年月日(3/17)は誕生日前なので本来は「18歳」でなければなりません。女性の方だったら怒られます!

Sheet2は月判定だけ対応したものです。

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


=IF(MONTH(TODAY())>=MONTH($B$2),YEAR(TODAY())-YEAR($B$2),YEAR(TODAY())-YEAR($B$2)-1)

「誕生月」以降はSheet1と同じ「年の差し引き」ですが、「誕生月」より前はさらに1を差し引いています。 厳密には「同月だったら日を判断して」を加えるのですが、長い計算式になってしまうし、ここではSheet3の方法をお勧めするので割愛します。
なお、現在のExcelは数百桁に及ぶ計算式でも正しければきちんと動くので、できないことではありません。

Sheet3が今回お勧めする「DATEDIF関数」です。

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


=DATEDIF($B$2,TODAY(),"Y")

こんなに簡単な式で「満年齢」は正しく算出されます。
1引数と第2引数が比較する2つの日付で大小が逆だと「#NUM!」になります。 第3引数は算出するのが「日数」なのか「月数」なのか「年数」なのかの指定で、ここでは「年数」なので「Y」を指定します。
この画像は2019/03/17時点のものなので、正しく「18歳」と表示されており、生年月日を「2000/03/17」に変えると「19歳」と表示されます。
DATEDIF」というのは「DATE(日付)」+「DIFF(差異)」と言う意味です。

DATEDIF関数」には取扱い上の注意があります。

DATEDIF関数」は特に新しい関数ではなく、少なくともExcel95/97あたりでは搭載されていたものと記憶しています。
但し、Microsoft的には「非サポート関数」という扱いらしく、関数ウィザードには出てこないなどの違いとして現われます。 これは「DATEDIF関数」がLotus 1-2-3との互換のために作られたものと説明されており、 うるう年などで正確を期するためにはオプションの詳細設定にある「1904年から計算する」にチェックを付ける必要があるそうです。

1904年から計算する

このページの画像リンクからダウンロードされるサンプルはこのチェックを付けてありますが、 チェックが付いていない他ブックからこのブックの日付セルを外部参照すると4年と1日分差し引かれた日付になってしまうという弊害があります。
チェックを付けない場合は「DATEDIF関数」で日数を算出するような時にうるう年の2月で1日の誤差が起きる場合があるようですが「満年齢」ではほとんど影響はないと思われるので、逆に上記の「弊害」の方が大きな問題なのでむしろチェックは付けない方が良いかも知れません。