生年月日と現在の日付または指定日から年齢を計算する方法

Excel で生年月日から年齢を求める方法を紹介します。
単純に日付同士の引き算で算出できそうな気がしますすが、日付の差分計算では、正確な年齢が計算できません。今回はその理由も含め、正しい計算方法を解説していきます。
生年月日から引き算で年齢を計算する
Excel で現在日付は TODAY() で求められます。セル上に指定する場合は「=TODAY()」と入力すれば OK です。ファイルを開いた時点の日付が、表示されるようになります。
では実際に TODAY() 関数を利用して、生年月日を求めてみましょう。
一見「TODAY() – 生年月日」で年齢を算出することができそうですが、冒頭で説明した通り、「TODAY() – 生年月日」では正確な年齢を算出できません。下の例をご覧ください。
Excel の日付は、1900/1/1 を起点としています。つまり差分を計算すると、上記のように 1990/1/1 + 差分 で表記されます。
ただこのままでは年齢として認識できないので、表示形式を変更します。計算式を入力した C列のセルを右クリックして [セルの書式設定(F)] を選択します。
セルの書式設定ウィンドウが表示されるので、[表示形式] タブの分類 [ユーザー定義] を選択し [種類(T)] に「yy」と直接入力します。そうすることで、年の下二桁が表示されます。
表示は綺麗になったものの、所々おかしな箇所があります。
引き算で計算すると数値がおかしくるなる
まず本日の日付 2015/9/1 において、4行目のエクセル花子さんは13歳になっているはずですが、計算結果は12歳です。そして同じ日付同士で引き算をしているのに、下記のように計算がずれてしまっています。
- 本当は差分が12年と12/31
- しかし計算結果は12年と12/30
なぜか引き算の結果が1日ずれてしまう事象が起こってしまうのです。
なお5行目のエクセル歳三さんの結果は100歳を超えているので 05 と表記されていますが、これは書式を3桁表記にすれば問題は解消します。
2000年を境に日付の引き算のずれる日数が違う
これは Excel の仕様なのかバグなのか詳細は不明です。
同じ日付で年が違う日付データ同士で引き算をする場合、2000年以降の日付が含まれると1日分のずれが生じてしまうのです。このため、日付同士の引き算で年齢を算出するのは望ましくないと言えるのです。
では、実際に年齢を算出するにはどうしたら良いのでしょうか?
日付の差分は DATEDIF 関数を利用
今回紹介する DATEDIF 関数は、Lotus 1-2-3 関数との互換性を保つために用意されている関数で、関数ウィザードやヘルプにも表示されない特別な関数です。
それでもセルに直接入力すれば、関数として利用できます。
DATEDIF 関数書式
DATEDIF( 開始日, 終了日, 単位 )
単位 | 戻り値 |
---|---|
“Y” | 期間内の満年数 |
“M” | 期間内の満月数 |
“D” | 期間内の満日数 |
“MD” | 開始日から終了日までの日数。この場合、月と年は考慮されません。 |
“YM” | 開始日から終了日までの月数。この場合、日と年は考慮されません。 |
“YD” | 開始日から終了日までの日数。この場合、年は考慮されません。 |
DATEDIF 関数を利用して年齢を求める
DATEDIF() 関数を用いて「単位」に “Y” を設定すれば、年齢を求められます。実際に関数を仕掛け直したものをご覧ください。
書式の [表示形式] は [標準] に戻しています
開始日に B列の日付、終了日に TODAY() 関数を指定します。引き算で正確に計算できなかった誕生日当日である 4行目のエクセル花子さんも、100歳を超える 5行目のエクセル歳三さんもきちんと計算することができました。
現在日付から指定日へ変更して年齢を計算する
TODAY() 関数を設定している部分を別の日付情報に変更すれば、指定日に対する年齢も計算できます。次の例では、別のセルに日付を入力し、そのセル値を基準日として年齢を求めています。
計算基準日を B7 セルの日付を参照するようにし、基準日に対する年齢を計算するようにしました。この B7 セルに「=TODAY()」と入力すれば、前述の現在日付に対する年齢となります。
DATEDIF 関数はかなり特殊な関数ですが、単純な引き算では正確な値が得られないため、年齢計算には必要不可欠な関数になります。これを機に、ぜひ覚えておいてください!
以上、生年月日から年齢を求める方法についてでした。