Accessで生年月日データを登録する中で、自動で年齢を計算したいといったニーズが出てくることがあります。そこで、検索日当日の年齢を計算してクエリで出力する方法を紹介します。
サンプルデータ
サンプルテーブルとして「個人テーブル」を作成し、「氏名」フィールドを短いテキスト型として、「生年月日」フィールドを日付/時刻型として設定します。
次に、これらフィールドに以下の通りサンプルデータを入力します。
氏名 | 生年月日 |
山田 太郎 | 2004/5/1 |
花沢 花子 | 1948/7/10 |
橋本 隆一 | 1995/10/1 |
年齢計算式
年齢計算に際しては、当該年において生年月日が過ぎているか、過ぎていないかで結果が変わってきますので、これらを踏まえてIIf文を用いた分岐が必要になります。結論から示しますと、以下の計算式で年齢を算出することができます。
IIf(Format(Date(),”mmdd”)<Format([生年月日],”mmdd”),DateDiff(“yyyy”,[生年月日],Date())-1,DateDiff(“yyyy”,[生年月日],Date()))
なお、IIf文については以下の記事を参照してください。
さて、上述の計算式が何を示しているかを一つずつ見ていきましょう。まずは、IIf文の判定条件についてです。
判定条件: Format(Date(),”mmdd”)<Format([生年月日],”mmdd”)
はじめに、Date()は今日の日付を取得する関数で、これをFormat関数で月日(mmdd)の形式に変換しています。Date関数とFormat関数についてはそれぞれ以下の記事をご参照ください。
したがって、今日の日付が「2020/7/11」とすると、Format(Date(),”mmdd”)は「0711」になります。次に、Format([生年月日],”mmdd”)はそれぞれの生年月日を先ほどと同じようにmmddの形式に変換しています。つまり、山田太郎さんの場合は生年月日が2004/5/1のため、「0501」に変換します。
これらのことから、IIf文で「今日」の月日が「生年月日」の月日より前の場合はTRUEに、後の場合はFALSEに分岐します。
次に、TRUEの式、つまり当該年で生年月日が来る前の年齢計算方法を考えていきましょう。
TRUEの式: DateDiff(“yyyy”,[生年月日],Date())-1
ここで、DateDiff関数が出てきました。この関数の一般式は次のようになります。
DateDiff(interval, date1, date2, [ firstdayofweek, [ firstweekofyear ]] )
interval: date1とdate2の時間間隔の計算に使用する時間単位を表す文字列式。(必須)
date1, date2: Variant (Date)として計算に使用する 2 つの日付。(必須)
firstdayofweek: 週の始まりの曜日を表す定数。省略すると、日曜日を指定したものとみなされる。(省略可)
firstweekofyear: 年の第1週を指定する定数で、省略すると1月1日を含む週が第1週とみなされる。(省略可)
以上のことを踏まえて、考えていきましょう。まず、intervalは「年」、第1引数は例えば、山田太郎さんの場合「2004/5/1」、そして、Date()を「2020/7/11」とします。すると、DateDiffで計算される値は 2020-2004 = 16 が得られます。さらに、「-1」として結果「15」が得られます。
※今回の場合、山田太郎さんは判定条件でTRUEにはなりません。
同様に、FALSEの式つまり当該年で生年月日が過ぎている場合を見ていきましょう。
FALSEの式: DateDiff(“yyyy”,[生年月日],Date())
これは先と同様に考えれば、山田太郎さんの場合に「16」が得られます。
クエリでの記載方法
それでは、作成した個人テーブルを用いてクエリに「年齢」フィールドを追加してみましょう。(図1を参照、計算は2020年7月10日を基準としています。)
図1に示すように、生年月日フィールドを基に、年齢を計算することができました。
まとめ
今回は、Accessを用いた年齢計算方法を紹介しました。このように、データベースで生年月日を保存していけば、その都度年齢を自動計算できるようになり、必要な時に、適切な情報を取得することができ、業務効率の改善及び計算間違いによるヒューマンエラーを防止することができますので、是非活用していただければと思います。
スポンサーリンク
コメント