Home » Access(アクセス)の使い方 » 生年月日から年齢計算をしたい−DateDiff関数・IIf関数

生年月日から年齢計算をしたい−DateDiff関数・IIf関数

対象:Access97,Access2000,Access2002,Access2003

Excelで年齢を計算する方法をご紹介しましたが、Accessでも年齢計算をしたいということはあります。

例えば顧客管理用データベースを作っていて、生年月日をデータとして蓄積していれば、そこから年齢を計算したいというのはよくあることです。

Excelの場合DATEDIF関数を使いましたが、Accessでは指定された日時の間隔を取得するDateDiff関数が用意されています。

ただしこの2つの関数、機能的に似てはいますが実はかなり違うので注意が必要です。

[スポンサードリンク]
まず名称から微妙に違っています。ExcelのDATEDIF関数は末尾の「F」は1つですが、AccessのDateDiff関数は「f」が2つです。
▼操作方法:クエリで満年齢計算をする演算フィールドを作成する
([生年月日]フィールドから[年齢]演算フィールドを作成する例)
クエリをデザインビューで開く
 ↓
フィールド欄に、
「年齢:IIf(Format([生年月日],"mm/dd")>Format(Date(),"mm/dd"),
DateDiff("yyyy",[生年月日],Date())-1,
DateDiff("yyyy",[生年月日],Date()))」
と記述する

DateDiff関数は、
第1引数で指定された単位で
開始日(第2引数)から
終了日(第3引数)までの期間を
表示してくれます。

第1引数には以下のような文字列を指定します。
"yyyy" : 年
"q" : 四半期
"m" : 月
"ww" : 週
"d" : 日

実際には第4引数・第5引数も指定でき、第1引数に指定できる文字列は他にもありますので、詳細はヘルプを参照してください。

名称・引数の違いのほかに、年数の数え方がまるで違う点にもっとも注意が必要でしょう。

例えば2004年12月31日と2005年1月1日を使って、
Excelで「=DATEDIF(DATE(2004,12,31),DATE(2005,1,1),"Y")」
とすれば勿論「0」になりますが、
Accessで「DateDiff("yyyy",#2004/12/31#,#2005/01/01#)」
とすると「1」になってしまいます。

ExcelのDATEDIF関数は満年齢を取得できるのに対して、AccessのDateDiff関数は数え歳的な考えの数値を返すので、「2004/12/31」と「2005/1/1」とでは1日しか経過していないにも関わらず、年は「1」加算されているので「1」を返してきます。

そのため満年齢を計算するに、上記のようにIIf関数を使って生年月日の月日(Format([生年月日],"mm/dd"))と今日の月日(Format(Date(),"mm/dd"))を比較して、「1」を引くかDateDiffそのままの値でいいのか判断する必要が出てくるのです。


参考書によっては、
「年齢:Int(DateDiff("d",[生年月日],Date())/365.25)」
で年齢を求められると紹介しているものもあります。
DateDiff関数で第1引数を「"d"」とすることで、生年月日から今日までの日数を求め、それを1年=365日にうるう年分の0.25を加算した365.25で割り算して、Int関数で整数部分を取得するという考えです。
多くの場合この方法でも計算できますが、場合によっては誤差が生じることもあります。(例えば2004/4/1生まれの人は2005/4/1でも0歳で、1歳になるのは2005/4/2になってしまいます。)

いずれにせよ記述が長くなってしまいますから、頻繁に年齢計算する必要があるのであれば、ユーザー定義関数を作成しておく方がいいんじゃないかと思います。

それからExcelでの年齢計算のときにも指摘した点ですが、年齢計算は我々が慣れ親しんでいる感覚と法律上の定義とでは異なりますから、法律上の年齢(誕生日の前日に年齢加算)が必要なのか、慣習に従った計算(誕生日に年齢加算)でいいのかは、事前に調査・決定しそれに応じた計算をする必要があります。

関連語句
アクセスのdatediff関数, 経過日数, 経過年数, 在籍期間計算, 勤続年数計算, 勤続年数を計算したい, 年齢を求める

[スポンサードリンク]

Home » Access(アクセス)の使い方 » 生年月日から年齢計算をしたい−DateDiff関数・IIf関数

「Access(アクセス)の使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.