見出し画像

[EXCEL]DATEDIF関数を使わない年齢計算の方法2(別解編) ~日付と時間のトラブルレスキュー~



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

お盆の息抜き記事 その2 です。
ちょっと雑な記事になってしまいましたが、ご寛恕を。

Copilotに寄れば、本記事中で示された数式が、「唯一無二の年齢計算の方法」だそうですが、個人的にはなかなか使いづらいと感じています(今のところ)。

前の記事では、YouTubeで見かけた「DATEDIFを使わない年齢計算」の方法を検証してみました。

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


なるほど!というののでしたが、注意しないと、法的な満年齢は出ません。


今回は、この動画とは別に、DATEDIF関数を使わないで年齢計算を行う方法を考えてみます。
なお、DATEDIF関数を使えば、年齢計算は簡単に出ます。
=DATEDIF(生年月日-1,基準日,"Y")

生年月日から1を引くのがポイントです。
詳細は、以下記事をどうぞ。

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



以下は、本編の「DATEDIF関数を使わない年齢計算の方法(別解)」です。
常体にて失礼。

○考え方
・生年月日の年から基準日の年を引けば、年の差分が出る。
・ただし、基準日(の月日)が誕生日(の月日)より前であれば、満年齢に到達していないので、年齢を一つ減らす(正しくは、基準日が「誕生日の前日」より前である場合)。
*以下、「月日」の表現は省略します。
・従って、基準日が誕生日(正しくは前日)と同じか否か、を判断して計算すればいい。

○数式
生年月日:C3 基準日:C4 とした場合

=YEAR(C4)-YEAR(C3-1)

YEAR:年月日から「年」を取り出し、年差を求める。
ただし、法的には「誕生日」の前日に満年齢に達するので、誕生日から1を引いておく(誕生日の前日)。

C4は、誕生日から1を引いていないので不適当

その上で、「誕生日の前日」と「基準日」を比較して、基準日<誕生日の前日 つまり、基準日が誕生日の先日より前ならば1を引き、そうでなければそのまま
とする。

数式で示すと以下になる。
生年月日:C3 基準日:C4

=YEAR(C3)-YEAR(C2-1)-IF(TEXT(C3,"MMDD")<TEXT(C2-1,"MMDD"),1,0)

下図の「満年齢」欄には、同じ数式が入っています。

誕生日の前日である12/31に満年齢に達している

この数式、結構面倒。というか、理解しづらい。

分かりづらいのは、年齢計算の段階でも、誕生日から1を引き、その後の、月日のところで、誕生日から1を引く必要があること。

Copilotに聞いても、最初は、
=YEAR(C3) - YEAR(C2 - 1)-IF(TEXT(C3,"MMDD") < TEXT(C2,"MMDD"), 1, 0)
という数式を示されました。
これだと、誕生日の前の日に満年齢に達しません。

3/31に5歳のままです


色々試しましたが、1歳の誕生日なのに、2歳となったり、誕生日と基準日が同一年だと-1になったり・・・。

Copilotにも上の図を示して、まちがいでは?と指摘したら、間違いと認めました。
正しくは、上述のとおり、以下の式になります。
=YEAR(C3) - YEAR(C2 - 1)-IF(TEXT(C3,"MMDD") < TEXT(C2 - 1,"MMDD"), 1, 0)

Copilotは自信をもって答えてきますが、間違いを指摘すると、コロリと変わります。生成AIの回答を鵜呑みにしてはいけない、のは当たり前ですが、いちいち突っ込みを入れるのは、疲れます。


というわけで、別解としてみましたが、なかなか難しいところです。

確かに、この式を基にすると、後日掲載の「うるう年対策」の計算ができます。
とはいえ、日常使いには、ハードルが高い気がします。

[EXCEL] DATEDIF関数による年齢計算は2/29生まれで破綻する、とCopilotに指摘されたので、検証してみたら・・・ ~日付と時刻のトラブルレスキュー~



なお、過去、「不適当な年齢計算の方法」の記事を掲載しています。
よろしければどうぞ。

不適当な年齢計算の方法1・YEARFRAC関数
[Excel]DATEDIFの代替といわれるYEARFRACはうるう年の満年齢を正確に計算できない?


*今、Copilotに聞いたら「誕生日の前日が満了日(民法143条)を再現できない」とのことでした。

不適当な年齢計算の方法2:基準日-誕生日
[EXCEL]基準日-誕生日という単純な式で満年齢が出せるのか検証せよ!

これは、そもそも力技過ぎ。


(結論)
年齢計算は、DATEDIFが一番楽です(今のところ)。
Copilotは、DATEDIFでは法的に正しい年齢計算はできない、と言ってきますが、やり方次第かな、と(Copilotが「正しく計算できない理由」を説明してくるのですが、2000/4/1の前日を1999/3/31と捉えていたり、それ自体が間違っていました…)。

C2=2000/4/1なのですが、
C2-1が、1999/3/31になってしまっています




たしかに、バグがあるともいわれますが、通常の年齢計算なら問題ないと思います。
念のため、ファイル⇒その他⇒オプション⇒詳細設定で「1904年から計算する」にしておいた方がいいでしょう。

いずれにせよ、通常の経過年数の計算と年齢計算は違う、です。

くどいですが、DATEDIF関数での満年齢の出し方はこちら。
「正確でない情報」による「法的に正しくない年齢計算」が行われないことを願っています。

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


なぜ、「誕生日の前日」に満年齢になるのか疑問な方はこちら。

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


記事途中でも書きましたが、DATEDIF関数を含め、うるう年の計算に誤りが出るかの検証記事は以下です。ご関心あればどうぞ。
[EXCEL] DATEDIF関数による年齢計算は2/29生まれで破綻する、とCopilotに指摘されたので、検証してみたら・・・ ~日付と時刻のトラブルレスキュー~


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