<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>クエリを極める
  



 menu

24.生年月日から年齢を計算する

[生年月日]と今日の日付を比較して、年齢を計算します。
難しいわけではありませんが、式が長いので入力がめんどくさいです。

右側の空いているグリッドに、ちょっと長い式を入力しますよ。すごく長い式なので、落ち着いてゆっくり入力しましょう。
いちおう確認のために、[名前]と[生年月日]も並べておきましょうか。
で、上の図のオレンジの枠線の中に、どういう式を入力しなくちゃならないかというと???

めんどくせぇ〜
一番左端の「年齢」というのが、この列の「項目名」になります。これは別になんでもいいんです。何か他の項目名にしてもオッケーデスよ。ただ、「年齢」のすぐ右側に、半角のコロン:を忘れないようにしてください。これがないとエラーになっちゃいます。
もちろん、項目名なんてどっちでもいいや、という場合は、いきなりiifから入力し始めてもオッケーデス。その場合は勝手に「式1」という項目名になります。

結果はこう↓なりました(今日は2002/3/21です)


21.22.23.を組み合わせて、ひとつの式を作る感じかな。。。。
めちゃめちゃめんどくさいですね。たかが年齢を計算するのに、なんでこんなめんどっちいんでしょう。
何で難しいかっていうと、「誕生日」が過ぎたか過ぎてないかで、年齢が1違うわけですよね。
数え年でいいなら、単にDateDiff関数使って年数を求めればオッケーなんです。
でも、みんなで正月にいっせいに年をとるわけではございませんですよね。
そこんとこちょっと考えていかないとなりません。



★考え方★

単純な「数え年」(正月がきたらひとつ年をとる)なら、DateDiff("yyyy",[誕生日],Date())で出すことができます。
しかしふつうは「その年の誕生日がきたらひとつ年をとる」ことになるので、まだ誕生日が来てないのならDateDiff("yyyy",[誕生日],Date())-1にしておかないとなりません。
そこんとこがややこしい。んでは、順を追って見てみましょう。

まずiif関数を使って「今年、誕生日が来たかどうか」を判断します。
[生年月日]という名前のフィールドに入力されている日付の「月と日」の部分と、今日の「月と日」を比較してみましょう。比較の方法はいろいろ考えられるかと思いますが、簡単にFormat関数とDate関数を活用してみますと・・・。

  Format([生年月日],"mmdd")<--------A
  Format(Date(),"mmdd")<----------B

このふたつを比較し、Aの方が大きければ、今年はまだ誕生日が来てない。Bの方が大きければ、誕生日はもう過ぎている、という判断ができるようになります。
ここでちょっとだけ注意を・・・。Format関数は「書式」を指定するための関数です。Format([誕生日],"mmdd")の答えは「1021」など4桁の数字になりますが、扱いは「文字扱い」になります。ハイフンやスラッシュなどの記号を使ったり、桁がそろってなかったりすると思ったような比較ができなくなるので、この場合は必ず"mmdd"としましょう。

したがって、iif関数は

   iif(Format([生年月日],"mmdd")>Format(Date(),"mmdd"),YESの場合,Noの場合)

となります。

で、Aの方が大きい場合は(YESの場合)、今年は誕生日がまだ来ていないので、
  DateDiff("yyyy",[生年月日],Date())-1
それ以外の場合(Bの方が大きい場合、つまりNoの場合)は、誕生日が過ぎているということになるので、
  DateDiff("yyyy",[生年月日],Date())
となります。

でもって最終的に、

   iif(Format([生年月日],"mmdd")>Format(Date(),"mmdd"),DateDiff("yyyy",[生年月日],Date())-1,DateDiff("yyyy",[生年月日],Date()))

となります。
色分けされているところをじっくり観察して、カッコとかカンマとかがどうなってるのか、じっくり理解をしてってくださいね。
計算式は長くなると入力するのも大変です。いきなり左端から入力しようとせず、関数の構成などを理解しながら少しずつ組み立てていくようにしましょう。でないと、カッコがかたっぽ足りないとか、つまんないところでエラーになってしまいます。
つまんないところのエラーは逆に見つけにくいもの。余計な手間や時間がかかっちゃいますからね。。。。

フィールド名が[生年月日]なら、上の式をそのまんまコピーしてグリッドに貼り付ければ、答えは出ます。
でも、できれば、せっかくだから、式の意味を理解して、なんか応用ができるようにしてってください。

もう一工夫してみると・・・・。


「○○歳」って表示させることもできちゃいます。
扱いが「テキスト型」になるので左に寄っちゃいますが、こんなのは書式で右側に寄せることできますよね。

※MS-Access独自の関数を用いているので、ここではSQL文は省きます。