見出し画像

[EXCEL]DATEDIF関数を使わない年齢計算の方法1 =TEXT(生年月日,”YYYYMMDD”)と基準日の差分を出して10000で割る(検証編) ~日付と時間のトラブルレスキュー~


目次 > 日付と時間のトラブルレスキュー

お盆の息抜き記事です。


年齢は以下の数式で出せます。
=DATEDIF(生年月日-1,基準日,"Y")

詳細は、こちらをどうぞ。

[Excel]満年齢を出す計算式 DATEDIF関数 その3




YouTubeで「DATEDIF関数を使わない年齢計算方法」という動画を見ました。YouTubeのエクセル動画は勉強にはなるものの、私にはまどろっこしいので、ほぼ見ませんが…。


動画はこちら(8:11の年齢計算の方法から再生)

この中で気になったのは2点。

その1
DATEDIF関数での年齢計算として以下が紹介されていたこと。
=DATEDIF(開始日,終了日,"Y")

開始日,終了日は、以下と同じなので、以下、言い換えています。
・開始年:生年月日(生まれたその日)
・終了年:誕生日(毎年の生年月日相当日)

この動画だけではなく、「DATEDIF関数による年齢計算の説明あるある」ですが、これでは法的に正しい年齢は出せません。
法的には、誕生日の前日に満年齢に達するからです。

上の方法だと、4/1生まれも4/2生まれも同じ学年になってしまいます。

一般的な年齢なら、この計算でもいいのかもしれませんが、法的な(=正確な)年齢計算の場合は注意が必要です。

詳細はこちら。
[Excel]誕生日の前日に年を取るのはなんで?、と思った方へ(WEB記事やエクセル本は不正確なものが多いので注意)


*単なる経過年数なら1を引く必要はありません。
=DATEDIF(開始日,終了日,"Y") のままで問題ありません。
「年齢」と「勤続年数」を同じに扱ってしまうのは、適切ではない、といえます。


その2
DATEDIFを使わない方法として以下を説明していたこと。
8桁の数値に直した生年月日と基準日の差分を10000で割り、整数部分を年齢とする、というもの。

動画では、計算結果をINT関数で整数化していました

「古典的な方法」とのことですが、なるほどこんなやり方があるのか、と思いました。
8桁化したうえで、基準日から生年月日を引いて10000で割れば、整数部分が年齢になります。基準日が誕生日と同日以降なら「+1」となります。

TEXTで文字列化したデータを計算に使う、という「力技」ともいえますが、なんとか答えを出そうと考えた先人の発想には敬意を表します。


しかし、この方法でも、法的に正しい年齢は出ません。

上述の通り、一般的な年齢計算ならいいのでしょうが、年齢は「法的な手続き」に使われる場合が多いので、「法的に正しい年齢」を出すのが基本です(行政なら当然)。

上の計算方法だと、4/1生まれも4/2生まれも、3/31時点では「満6歳」に達しておらず、同じ学年(共に翌年の4/1に小学生1年生)になってしまいます。

実際は、4/1生まれは3/31に満6歳になり(=翌日、つまり今年の4/1から小学1年生)、4/2生まれ(=1年後の、つまり来年の4/1から小学1年生)より1学年上になります。

(参考)
年齢計算ニ関スル法律(初日算入)
年齢は出生の日をもって起算する。

学校教育法 第17条第1項(入学年齢の直接根拠)
保護者は、子の満6歳に達した日の翌日以後における最初の学年の初めから、これを小学校に就学させる義務を負う。
*「学年の初め 4月1日 」(学校教育法施行規則第59条)

詳細は既出の記事参照


ただし、DATEDIF同様、この方法でも「生年月日から1を引く」ことで「法的に正しい年齢」を出すことは可能です。
TEXT関数で文字列化する前に、1を引着ておきます。

=TEXT(生年月日-1,"YYYYMMDD")

こうすれば、誕生日の前の日に満年齢に到達します。



先人の発想には敬意を表しつつ、やはりエクセルの知識だけでは正しい答えが出せない場合がある、ということです。
というか、エクセルで出す数値は、「何か」(法的手続き等)のために出すものであり、その「何か」の意味を理解したうえで、それに合った数値を出す必要があります。
当然すぎることですが・・・。


というわけで、今回はたまたま見かけた数式を検証してみました。

次回は、DATEDIF関数を使わない年齢計算の「別解」を考えてみます。

2026/8/16 記事、書きました。
[EXCEL]DATEDIF関数を使わない年齢計算の方法2(別解編) ~日付と時間のトラブルレスキュー~


日付と時間のトラブルなら、こちら

軽めのトラブルはこちらをどうぞ
「プチトラブルレスキュー」シリーズ 一覧記事


おまけ

GEMINIに「DATEDIFを使わないで、満年齢を出す数式を示して」と聞いたところ、以下の回答でした。

(GEMINI)
ExcelでDATEDIF関数を使わずに、法律上の定義(誕生日の前日に加齢)に沿った正確な満年齢を計算する数式は以下の通りです。
計算式(生年月日がA2、基準日がB2の場合)
Excel

=INT((YEARFRAC(A2-1, B2)))

または、8桁の数値(YYYYMMDD)に変換して引き算する定番の計算手法に法律上の調整を入れる場合は以下のようになります。
Excel

=INT((TEXT(B2,"YYYYMMDD")-TEXT(A2-1,"YYYYMMDD"))/10000)

解説

  • A2-1(1日引く理由): 年齢計算に関する法律(「年齢計算ニ関スル法律」および民法第143条)では、「誕生日の前日終了時(24時)に年をとる」と定められています。生年月日から1日引いた日付(A2-1)を基準に計算することで、4月1日生まれの人が3月31日時点で満年齢に達する等の法的な判定を正確に行えます。

  • INT(...): 端数(月日部分の未達分)を切り捨てて整数(満年齢)にします。


(コメント)
YEARFRACを使った上の数式は正しい計算ができませんでしたが(詳細略)、下の数式は、生年月日から1を引いており、法的に正しい年齢が出せます。

一方、Copilotは全然ダメでした(詳細略)。
突っ込みを繰り返したら何とかなりましたが・・・。



いいなと思ったら応援しよう!