Accessにおいて生年月日から年齢を求めたいことがあります。
Excelでは生年月日から年齢を求めるためにDATEDIF関数というものを使いました。AccessではDateDiff関数という関数を使用して生年月日から年齢を求めることができます。
Accessで生年月日から年齢を求める方法
Accessで生年月日から年齢を計算したいときのひとつの手段として、AccessのデータベースをExcel形式でエクスポートして、DATEDIF関数を使うという方法があります。しかし、ひと手間かかりますし、直接Accessで年齢を扱いたいときもあります。
ExcelのDATEDIF関数については次をご覧ください。

そこで今回はDateDiff関数というものを使って年齢を計算してみたいと思います。(関数名が非常に似ているので注意してください。)ここでは、[生年月日]フィールドから[年齢]という演算フィールドに年齢を出力したいとします。
DateDiff関数
Accessにおいても、ExcelのDATEDIFと似たような名前のDateDiffという関数が存在します。
しかし、このDateDiff関数を使用して年齢を求めるにはすこし手間を加えなければいけません。
先に結論からお伝えすると、「演算クエリフィールドを定義するための式を入力してください」というところ(フィールドを右クリック→ビルド→図)に次の式を入力します。
DateDiff(“yyyy”,[生年月日],Date())-1,
DateDiff(“yyyy”,[生年月日],Date()))

図:式ビルダ―
結果だけ求められればいいやという方は上記の式を入力していただければ大丈夫です。
[生年月日]などフィールドの名前の部分は状況に応じて変更してください。
式の説明
ここからはなぜ上記の式で年齢が求められるかについてです。
はじめにDateDiff関数について、今回使う機能に絞って説明させていただきます。
DateDiff関数は2つの日付の時間間隔を返す関数です。
DateDiff関数の書式
DateDiff(interval, date1, date2)
interval | 意味 |
yyyy | 年 |
q | 四半期 |
m | 月 |
y | 年間通算日 |
d | 日 |
w | 週日 |
ww | 週 |
h | 時 |
n | 分 |
s | 秒 |
第一引数のintervalは次のような文字列を指定します。今回は年齢を求めたいので引数intervalには”yyyy”を指定します。
第二引数のdate1,date2は計算で使用したい(時間間隔を求めたい)日付2つです。
今回の場合はdate1に誕生日、date2に今日の日付を指定します。
DateDiff関数の特徴
例えば、誕生日が2017/12/31の方で、2018/1/1現在の満年齢は0歳となりますが、DateDiff関数でDateDiff(“yyyy”,”2017/12/31″,”2018/1/1″)を実行すると1となります。
DateDiff関数で”yyyy”を指定した場合は1月1日をカウントの基準日としているため、年が変わると1年を経過していなくても1と表示される仕様になっています。
そのため、誕生日の月日と今現在の月日を比較して、年が変わっていれば(誕生日の月日の方が大きければ)DateDiff関数の結果から1を引き、年が変わっていなければ(誕生日の月日の方が小さければ)DateDiff関数の結果をそのまま使用するというような工夫が必要になります。
その結果が下記の式ということになります。
DateDiff(“yyyy”,[生年月日],Date())-1,
DateDiff(“yyyy”,[生年月日],Date()))
IIf関数について
IIf関数は、ExcelでいうところのIF関数です。AccessではIIf関数を使用します。使い方は、ExcelのIf関数と同じです。
IIf ( expr , truepart , falsepart )
第一引数のexprが評価される式、第二引数truepartはexprが真のとき、第三引数falseparatはexprが偽のときに返される式または値です。
Format関数について
Format関数は式を指定された形式に変換して、文字列として返す関数です。今回の例の場合は、生年月日などを”mm/dd”形式に変換して使用しています。
Format([生年月日],”mm/dd”)
生年月日の値を”mm/dd”の形式にして文字列として返
します。
Format(Date(),”mm/dd”)
今日の日付を”mm/dd”の形式にして文字列として返します。
コメント