- 締切済み
Access 2000での年齢計算
Access 2000にて作成しているデータベースのレポートにて、顧客の年齢を計算しています。基本的には正しい年齢が表示されるのですが、一部の方の分だけ年齢の計算結果が正しくありません。現時点で見つかっている事例は2件のみですが、正しい年齢より1年多かったり、逆に1年少なかったりと、パターンが一定しているわけでもないため、どこに問題があるのかが分かりません。確認してみるべき点について色々お教え頂ければ幸いです。 記 ◎年齢計算に使っている関数は以下の通りです。 =Trim(IIf(Format([生年月日],"mm/dd")>=Format(Now(),"mm/dd"),DateDiff("yyyy",[生年月日],Now()),DateDiff("yyyy",[生年月日],Now())-1) & "歳") 「生年月日」フィールドに西暦で生年月日が格納されており、レポートを印刷する時点での日付と誕生日を比較することで、単純に年数の引き算をしたり、更に1を引いたりしています。 以上
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- CHRONOS_0
- ベストアンサー率54% (457/838)
あの式には問題はありません >つまり、確認された2件の、テーブルに格納されている生年月日に、おかしな所はありません。 >問題の式を設定しているレポートに、テーブルから情報を入れても、 >クエリを経由していれても、同じようにおかしな結果になる訳です。 このロジックは変ですよ 普通処理法を変えても同じ変な結果になるのならその元の数値がおかしいと考えるのでは
- CHRONOS_0
- ベストアンサー率54% (457/838)
式におかしい点はありませんよ 考えられるのは格納されているデータのほうに問題があるということでしょうか >一部の方の分だけ年齢の計算結果が正しくありません。 >現時点で見つかっている事例は2件のみですが、 この2件はどのようなものですか?
補足
ご回答ありがとうございます。 「どのような」、と言われても説明に困るのですが、式に直接関係ある限りでは、他のものと同じように、生年月日が西暦で入力されています。テーブルへのデータ入力にはフォームを使っており、入力規則やIMEの挙動制御も行っていますので、年号を使った入力でも自動的に西暦に変換されて、半角数字でテーブルに格納されます。レポートで式が扱う情報は、ですから西暦で入力された生年月日、ということになりますね。 更に不思議なのは…… まず、テーブルから直接情報をひっぱってきてレポートにした場合であっても、何らかのクエリを経由してからレポートにした場合であっても、年齢の表示のされ方、それもおかしくなる「なり方」が、同じ方の情報であれば、同じになるんですよねぇ(言ってること分かりますでしょうか?)。 つまり、確認された2件の、テーブルに格納されている生年月日に、おかしな所はありません。問題の式を設定しているレポートに、テーブルから情報を入れても、クエリを経由していれても、同じようにおかしな結果になる訳です。 式自体は満年齢を計算すべく設定したものなので、誕生日を迎えた方の年齢なら、計算する日の西暦から誕生日の生年を引き算します。誕生日を迎えてなければ更に1引きます。これだけなのですが、誕生日を迎えている方の年齢が1年分少なく表示されたり、誕生日を迎えていない方の年齢が1年多く表示されたりするのです。 ホント、どこがおかしいのでしょう??
- mshr1962
- ベストアンサー率39% (7417/18945)
=(DateDiff("yyyy",[生年月日],Date())-IIf(Format([生年月日],"mmdd") >= Format(Date(),"mmdd"),0,1)) & "歳" では如何でしょうか?
お礼
ご回答ありがとうござます。 ずっとすっきりした関数なので期待したのですが、結果に変化は見られませんでした。
お礼
生年月日を入力し直してみました。単純に、フォームから元のデータと同じ生年月日を入力し直した上で、レポートを開き直したわけですが、年齢に表示される内容は、入力し直す前のものと変わりませんでした。 元の数値の問題ではない、ということになるのでしょうか? ともかく、ありがとうございました。
補足
ご回答ありがとうございます。 >普通処理法を変えても同じ変な結果になるのならその元の数値がおかしいと考えるのでは ああ、なるほど。 かといって、人の生年月日を勝手に変えるわけにもいかないので…… 同じ数値を入力し直してみます。 当方夜勤専門ですので、明日の17時以降に試してみます。