対象:Access97,Access2000,Access2002,Access2003Excelで年齢を計算する方法をご紹介しましたが、Accessでも年齢計算をしたいということはあります。顧客管理用データベースを作っていて、生年月日をデータとして蓄積していれば、そこから年齢を計算したいというのはよくあることです。Excelの場合DATEDIF関数を使いましたが、Accessでは指定された日時の間隔を取得するDateDiff関数が用意されています。この2つの関数、機能的に似てはいますが実はかなり違うので注意が必要です。[スポンサードリンク]まず名称から微妙に違っています。ExcelのDATEDIF関数は末尾の「F」は1つですが、AccessのDateDiff関数は「f」が2つです。第1引数で指定された単位で開始日(第2引数)から終了日(第3引数)までの期間を表示してくれます。第1引数には以下のような文字列を指定します。実際には第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での年齢計算のときにも指摘した点ですが、年齢計算は我々が慣れ親しんでいる感覚と法律上の定義とでは異なりますから、法律上の年齢(誕生日の前日に年齢加算)が必要なのか、慣習に従った計算(誕生日に年齢加算)でいいのかは、事前に調査・決定しそれに応じた計算をする必要があります。Excelで○ヶ月後の日付を取得する方法として、EDATE関数をご紹介しました。Accessで同様のことをするにはどうすればいいでしょうか。Officeの使い方などを紹介し続け(2012年頃からはVBA関連記事が多め)、毎日5万人の方にご覧いただいています。