【Excel】生年月日から年齢を計算する方法。現在の日付・指定日から算出する
Excel で生年月日から年齢を求める方法を紹介します。
単純に日付同士の引き算で算出できそうな気がしますすが、日付の差分計算では、正確な年齢が計算できません。今回はその理由も含め、正しい計算方法を解説します。
生年月日から年齢を計算するには DATEDIF 関数を使う
今回紹介する DATEDIF 関数は、日付の差分を求めるときに利用する関数です。元々は Lotus 1-2-3 関数との互換性を保つために用意されている関数であるため、関数ウィザードやヘルプにも表示されない特別な関数として存在しています。
しかし特別な設定があるわけでなく、そのままセルに入力すれば関数として利用できます。
DATEDIF 関数書式
DATEDIF( 開始日, 終了日, 単位 )
単位 | 戻り値 |
---|---|
“Y” | 期間内の満年数 |
“M” | 期間内の満月数 |
“D” | 期間内の満日数 |
“MD” | 開始日から終了日までの日数。この場合、月と年は考慮されません。 |
“YM” | 開始日から終了日までの月数。この場合、日と年は考慮されません。 |
“YD” | 開始日から終了日までの日数。この場合、年は考慮されません。 |
DATEDIF 関数で現在の年齢を求める
DATEDIF() 関数を使って、今日時点での誕生日を求める方法から紹介します。関数の引数には次のように設定します。
- [開始日] …… 生年月日
- [終了日] …… 今日の日付 TODAY()
- [単位] …… “Y” で満年数を求める
では実際に関数を仕掛けたものをご覧ください。
書式の [表示形式] は [標準] です
開始日に B列の日付、終了日に TODAY() 関数をセット。
今日 (2/7) 誕生日のエクセル花子さんも、正しく計算されています。
特定の日における年齢を求める方法
TODAY() 関数を設定している部分を別の日付に変えれば、指定日に対する年齢も計算できます。次の例では、別のセルに日付を入力し、そのセルを基準日として年齢を求めています。
計算基準日は B7 セルの日付を参照して、基準日に対する年齢を計算しています。この B7 セルに「=TODAY()」と入力すれば、前項の現在日付に対する年齢になります。
生年月日は日付の引き算で計算できない
もっと簡単に「TODAY() – 生年月日」で算出できそうなのに、なぜ計算できないのか。その謎を少し掘り下げて解説します。
「TODAY() – 生年月日」で計算した例
実際に数式を入れて計算ました。
日付の書式がそのまま反映されてしまったので、よくわからない値になっています。
Excel の日付は、1900/1/1 を起点 (0 のようなもの) としています。つまり差分を計算すると、上記のように「1990/1/1 + 差分」の値が出力されます。
表示形式を変更して、差分で求めたい「年」を出力するようにしてみます。
計算式を入力したC列のセルを右クリックして [セルの書式設定(F)] を選択。
セルの書式設定で、[表示形式] タブの分類 [ユーザー定義] を選択し [種類(T)] に「yy」と直接入力します。これで年の下二桁が表示されます。
表示は綺麗になったものの、ちょっとおかしいですね。
引き算で計算すると数値がおかしくなる
まず本日の日付 2023/2/7 において、4行目のエクセル花子さんは12歳になっているはずですが、計算結果は11歳です。なぜか?
理由は、差分が11年と 12/31 になっているため。
年の “yy” で出力すると日付以降が切り捨てられるため、本当は 12 なのに 11 が出力されます。翌日になると 12年と 1/1 になり正しい年齢が反映されます。
日付にはゼロの概念がなく、この計算式だと誕生日当日に年齢が繰り上げされない点が問題になります。これが差分で誕生日を求められない最大の理由です。
また5行目のエクセル歳三さんは、100歳を超えています。そのため2桁表示だと 10 になってしまいます。しかし書式で yyy の3桁は定義できないため、こちらも正しく出力できません。
【結論】DATEDIF 関数を使おう
DATEDIF 関数はかなり特殊な関数ですが、単純な引き算では正確な値が得られないため、年齢計算には必要不可欠な関数になります。これを機に、ぜひ覚えておいてください!
以上、生年月日から年齢を求める方法についてでした。