ロータスアプローチにアプローチ?
アプローチ? ヒント集 サンプル集 当初の開設目的 活用情報掲示板 お知らせ
リンク Links Links 更新履歴 管理人へメール トップページへ サイト内検索

トップページ >> ヒント集 >> 年齢計算

 年齢計算 (1) 

アプローチで、年齢計算はどうするのでしょう。
簡単そうに思えますが、やってみると、ほんの少し面倒です。
その方法をご紹介します。

実務で必要になることも多い計算です。ご参考にどうぞ。


なお、ここで紹介する計算式は、
「活用情報掲示板」で issun さんが提示なさったものをベースにしています。
利用価値のある計算式を提示なさった issun さんに感謝します。


さらに、komaden さんより「活用情報掲示板」に「年齢ニ関スル法律」の情報
が寄せられました。
法律に対応する計算式のほうが実務での応用範囲が広いと判断し、
「年齢ニ関スル法律」に対応する内容に改訂しました。
情報をお寄せになった komaden さんに感謝します。

なお、「年齢ニ関スル法律」に関してはこちらをご覧ください。


1.まず、下図のような簡単なデータベースを作ってみます。

  「日付」フィールド − 「誕生日」フィールド で年齢計算ができれば、簡単で便利なんですが...

 

2.やはり、「日付」フィールド − 「誕生日」フィールド では、年齢計算はできないようです。

  年齢欄に表示されているのは、日数かなにかのようです。

 

3.では、式を工夫してみましょう。

  Year(日付)は、「日付」フィールドから年を、
  Year(誕生日)は、「誕生日」フィールドから年を、それぞれ取り出します。

  そして、Year(日付) − Year(誕生日) で、取り出した年数同士の差を計算します。

 

4.Year(日付) − Year(誕生日) とすると、それらしい数値にはなりましたが、
  まだ正解にはなりません。

  この式は、年同士の差し引き計算ですから、当然といえば当然です。

 

5.Year(日付) − Year(誕生日) という式に、月日を考慮する式を付け加えると、
  正確に年齢計算することができます。

  その月日を考慮する式というのは、
  DateToText(日付+1,'MMDD') < DateToText(誕生日,'MMDD') という式です。

  DateToText(日付+1,'MMDD') は、
   日付型の「日付」フィールドの値に1を加えた値から、
   'MMDD'、つまり月日を文字型にして取り出します。

   ここで「日付」フィールドの値に1を加えているのは、
   年齢計算に関する日本の法律上の規定に対応するためです。
   詳しくは、あとで説明します。

  DateToText(誕生日,'MMDD')は、
   日付型の「誕生日」フィールドから、
   'MMDD'、つまり月日を、文字型にして取り出します。
  
  そして、< がありますから、
   DateToText(日付+1,'MMDD') < DateToText(誕生日,'MMDD') は、
   「日付」フィールドの1日あとの月日より、
   「誕生日」フィールドの月日のほうが大きいかどうかを比較する論理式となり、
   大きければ 1 に、大きくなければ 0 になります。

  したがって、
   Year(日付) − Year(誕生日)
    − (DateToText(日付+1,'MMDD') < DateToText(誕生日,'MMDD'))
  は、つぎのように計算されます。

  まず、Year(日付) − Year(誕生日) で年の差し引き計算をします。

  次に、− (DateToText(日付+1,'MMDD') < DateToText(誕生日,'MMDD')) で、
  「日付」フィールドの月日より1日あとの月日が、
  「誕生日」フィールドの月日を過ぎていれば 0 を、過ぎていなければ 1 を、
  Year(日付) − Year(誕生日) で計算した年数から引き算します。

  言い換えれば、
  「日付」フィールドの月日の1日あとの月日が、
  「誕生日」フィールドの月日を過ぎていなければ、1を引くということです。


なぜ、日付+1 なのか?

DateToText(日付+1,'MMDD') で、
日付+1 となっているのは年齢計算の法律上の規定に対応するためです。

年齢計算の法律上の規定では、誕生日の前日に一つ歳をとることになっていますから、
3月31日に年齢計算をする場合、4月1日生まれの人は、
3月31日に年齢を加算しなくてはなりません。

下表のように DateToText(日付+1,'MMDD') の式の中で日付に1を加えれば、
誕生日の前日に年齢を加算することができます。

3月31日に年齢計算をする場合、
DateToText(日付,'MMDD') では、4月1日生まれの人は年齢は加算されません。

  (1) (2) (3) (4)
日付(年齢計算日) 2002/03/31 2002/03/31 2002/03/31 2002/03/31
日付+1 2001/04/01 2001/04/01 2001/04/01 2001/04/01
誕生日 2001/03/30 2001/03/31 2001/04/01 2001/04/02

DateToText(日付+1,'MMDD') 
  < DateToText(誕生日,'MMDD')

0 0 0 1

Year(日付)
  − Year(誕生日)

1 1 1 1

Year(日付)
 − Year(誕生日)
 −(DateToText(日付+1,'MMDD') 
  < DateToText(誕生日,'MMDD'))

1 1 1 0


上の表では、年齢計算日の日付を一定にして、誕生日を1日ずつ変えましたが、
今度は逆に、誕生日を一定にして、年齢計算日を1日ずつ変えてみます。

  (1) (2) (3) (4)
日付(年齢計算日) 2002/03/29 2002/03/30 2002/03/31 2002/04/01
日付+1 2001/03/30 2001/03/31 2001/04/01 2001/04/02
誕生日 2001/04/01 2001/04/01 2001/04/01 2001/04/01

DateToText(日付+1,'MMDD') 
  < DateToText(誕生日,'MMDD')

1 1 0 0

Year(日付)
 − Year(誕生日)

1 1 1 1

Year(日付)
 − Year(誕生日)
 −(DateToText(日付+1,'MMDD') 
  < DateToText(誕生日,'MMDD'))

0 0 1 1


このように、下の式のようにすると、年齢計算の法律上の規定に合った計算が
できることがわかります。

Year(日付) − Year(誕生日) −(DateToText(日付+1,'MMDD') < DateToText(誕生日,'MMDD'))



6.では、正しく年齢計算ができているか、見てみましょう。

  下図のように、正しく年齢計算が行われています。


さて、これまでの説明で年齢計算をすることができるようになりました。

ただ、これだけでは、新しいレコードを作るたびに、「日付」フィールドに
入力しなければならず、面倒です。
次のページでは、もう少し楽に作業できるようにしてみましょう。

なお、以下のページでは、実用性を考慮し、いくつかの改良をしますが、
年齢計算の計算式は、このページで説明したものと基本的には変わりません。

次のページへ

年齢計算(1)
年齢計算(2)
年齢計算(3)
番外編・表計算ソフト

一行目に戻る

since Jan. 2, 2002 :

更新日 :