年齢を計算する関数を作りました

スポンサーリンク

お仕事をされていると年齢計算をする場面は多々あると思いますが、法律上の年齢計算の根拠はご存知でしょうか。

日本では、「誕生日の前日に歳をとる」とされていて、その根拠となる法律は、「年齢計算ニ関スル法律」と「民法」です。

スポンサーリンク

根拠法令

年齢計算ニ関スル法律

1 年齢ハ出生ノ日ヨリ之ヲ起算ス

2 民法第百四十三条ノ規定ハ年齢ノ計算ニ之ヲ準用ス

3 明治六年第三十六号布告ハ之ヲ廃止ス

民法 第一編 総則 第六章 期間の計算より引用

(期間の計算の通則)

第138条  期間の計算方法は、法令若しくは裁判上の命令に特別の定めがある場合又は法律行為に別段の定めがある場合を除き、この章の規定に従う。

(期間の起算)

第139条  時間によって期間を定めたときは、その期間は、即時から起算する。

第140条  日、週、月又は年によって期間を定めたときは、期間の初日は、算入しない。ただし、その期間が午前零時から始まるときは、この限りでない。

(期間の満了)

第141条  前条の場合には、期間は、その末日の終了をもって満了する。

第142条  期間の末日が日曜日、国民の祝日に関する法律 (昭和二十三年法律第百七十八号)に規定する休日その他の休日に当たるときは、その日に取引をしない慣習がある場合に限り、期間は、その翌日に満了する。

(暦による期間の計算)

第143条  週、月又は年によって期間を定めたときは、その期間は、暦に従って計算する。

2  週、月又は年の初めから期間を起算しないときは、その期間は、最後の週、月又は年においてその起算日に応当する日の前日に満了する。ただし、月又は年によって期間を定めた場合において、最後の月に応当する日がないときは、その月の末日に満了する。

e-Gov 法令データ提供システム https://elaws.e-gov.go.jp/ より引用しました

民法第140条及び第143条第2項の規定により、月または年の最初の期間を計算しない場合には、起算日に応答する日の前日が末日となります。

4月10日の1ヵ月後は、起算日は4月11日となり、それに応当する5月11日の前日、すなわち、5月10日が末日となります。

4月10日の1年間後は、起算日は4月11日となり、それに応当する翌年4月11日の前日、すなわち、翌年4月10日が末日となります。

ところが、前途のとおり年齢の計算に当たっては「年齢計算ニ関スル法律」第1項が適用され、期間の起算日は、誕生した日の翌日ではなく、誕生した日を起算日とするという例外の扱いをします。

次に、誕生日の前日に1年間が満了するのは誕生日の前日の何時か?というところですが、これは誕生日の前日の24時だそうです。

誕生日の0時じゃないか、と思われるでしょう。実は和休もそう思っていました。詳しくは割愛しますが、法律上の扱いは24時と0時は明確に分けられているそうです。

ということで、誕生日の前日24時に年齢はカウントされていくということになります。

スポンサーリンク

ACCESSに用意されている関数

ACCESSには、「DateDiff 関数」という指定した時間単位で 2 つの日付の時間間隔を調べることができる関数が用意されていますが、残念ながら民法に沿った年齢計算はできません。

そこで、和休が作成した関数「GET_OLD関数」をご紹介します。

基準日時点の年齢を取得する自作関数

使用される際は、そちらの環境で十分テストのうえ使用してください。

Function GET_OLD(SEI_YMD As Date, KIZYUN_YMD As Date) As Long
'基準日時点の年齢を返す関数
'SEI_YMD =生年月日をセット
'KIZYUN_YMD=基準日をセット
Dim TOUTATU_YMD As Date
TOUTATU_YMD = SEI_YMD - 1
GET_OLD = Year(KIZYUN_YMD) - Year(TOUTATU_YMD) + IIf(Format(KIZYUN_YMD, "mmdd") >= Format(TOUTATU_YMD, "mmdd"), 0, -1)
End Function

このコードを標準モジュールに貼り付けることで、クエリやフォーム、レポート内のテキストボックスで利用できます。

変数SEI_YMDに 生年月日を日付型で代入し、変数KIZYUN_YMDに年齢を求めたい時点の日付を日付型で代入してください。

スポンサーリンク

使用例です

年齢を表示させたいテキストボックスをtxt_年齢としましょう。

txt_年齢のコントロールソースにGET_OLD関数を入れます。

生年月日は、txt_生年月日に入力されていることとし、基準日は、今日とします。

=GET_OLD(txt_生年月日、Date())

デザインビューからフォームビューへ戻ってください。年齢が表示されましたか?

コメントをどうぞ!

タイトルとURLをコピーしました