3/09/2018

Access。誕生日から年齢を算出するって聞くけど、どうやるの?【age】

Access。誕生日から年齢を算出するって聞くけど、どうやるの?

<IIF+DATEDIFF関数+DATE関数+Format関数>

次のテーブルがあります。

Accessのテキストにはよく、単価×数量=金額などの計算は、
演算フィールドをクエリで作って算出しますとか記載されていて、
さらに、誕生日などの日付から、
満年齢や所属年数を算出すると記載されているのですが、
なかなか、年齢を算出する方法が掲載されていないので、
今回は、このテーブルにある誕生日フィールドを使って、
Accessではどのようにして、
年齢を算出したらいいのかというのをご紹介していきます。

確認ですが、Excelでは、どのように満年齢を算出するか、覚えていますか?

『DATEDIF関数』を使って算出するということでしたね。

ちなみにこのDATEDIF関数は、
手入力でないと作成することができない関数でしたね。

AccessにもこのDATEDIF関数と同じような、
DateDiff関数というのがあります。

まずここでの注意点ですが、最後に”f”が追加されています。
Iif関数と混在してしまうのですが、”i”が2個ではなくて、”f”が2個です。

ただ、この関数だけでは、Accessで年齢を算出することが難しいのですが…

それでは、クエリを作ってみましょう。
※Date関数を使用しておりますが、
この資料を作成しているのは2017年12月26日です。

年齢というフィールドを次のように作りました。

年齢: DateDiff("yyyy",[誕生日],Date())

では、確認してみましょう。

このように、年齢を算出してくれます。

Date()は今日を表します。

“yyyy”は、Accessでは、”年”を算出してくれます。”y”だと、
誕生日から今日までの日数を算出してしまいます。

”d”の日を算出するのと同じ結果を算出します。

ところが、よく見ると、年齢がきちんと算出されていません。

今日は2017年12月26日なので、
大久保さんは、まだ誕生日を迎えていないので、36歳のはず。

実は、ここが最大の問題点がありまして、
テキストではなかなか年齢を算出することを紹介していないわけです。

なぜこのようなことが起こってしまうのかというと、
DateDiff関数は、その期間中にある1月1日をカウントした結果を
算出しているからなのです。

”数え年”のような方法で算出しているわけですね。

なので、12月31日でも、すでに誕生日を迎えた年齢を算出しまっているのです。

そのため、年齢を算出するための演算フィールドは、
次のように修正する必要があります。

年齢2: IIf(Format([誕生日],"mm/dd")>Format(Date(),"mm/dd"),DateDiff("yyyy",[誕生日],Date())-1,DateDiff("yyyy",[誕生日],Date()))

とりあえず、結果を見てみましょう。

このように、12月31日の大久保さんだけは、
36歳のままになっていますよね。

これで、誕生日から年齢を算出することができました。

この演算フィールドを説明すると、
もし、誕生日が今日よりも大きければ、算出した結果-1をします。

そうでなければ、年齢を算出。という処理をしております。

Fomat関数を使って表示形式で、月日にして比べております。

このように、満年齢や就業年数をAccessで算出するには、
ひと手間かかりますので、Excelにエクスポートして、
DATEDIF関数を使って算出するほうが楽なのかもしれませんね。