- 締切済み
Access2007において、[生年月日]をもとに本日の日付から「○歳
Access2007において、[生年月日]をもとに本日の日付から「○歳○月」までを算出するには、どのような式を立てればいいのでしょうか? ちなみに「○歳○月○日」まで算出するとなると、どうなりますか? 検索結果からだと、「○歳」まで算出する式はなんとなく分かったのですが…。 ご存知の方がいらっしゃったら是非教えて下さい。 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- shinkami
- ベストアンサー率43% (179/411)
DateDiff関数 Excelに似た関数に Datedif関数がありますが パラメータ、計算結果に違いがあります。 Datedif(開始日,終了日,"Y") 満年数 Datedif(開始日,終了日,"YM") 年未満の月数 これに対してDateDiffでは DateDiff("YYYY",開始日,終了日) 年未満の月、日の値を無視して年だけの差になります。 DateDiffには "YM" は使えませんので MOD 関数を使用することになります。 そのため DateDiff("M",開始日,終了日) で総月数を求め 年未満の月数を 月=総月数 MOD 12 とし 年=(総月数-月)/12 で 求めることも出来ますが 話が変わりますが、日付関数のパラメータにシリアル値がありますね シリアル値は10進数と同じく連続した0を超える数値です。 1900年1月1日を1(10進数)としています。日進数とでも言うのでしょうか 10進数と違う点は桁上がり、桁下がりのです。 日の上の桁が月(大の月、小の月、うるう年により桁上がりの日数が異なります) 月の上の桁が年 日の下の桁が時、時の下の桁が分、分の下の桁が秒 こんなわけで シリアル値の差が期間(日数)ということになり、 この差を表示書式を日付にすると、年に1900が加えられた表示にになります。 このシリアル値の差よりYear関数、Month関数で年月を取り出したのがNo.1の回答です。 追伸、このシリアル値は、MicrosoftOfficeだけのものと限定してください。 コンピュータの元は2進数です。これをどのように発展させているのかは自分には分かりません おそらく Mac UNIX では別の展開があると思います。
- shinkami
- ベストアンサー率43% (179/411)
生年月日から本日迄の経過日数を求め、これを年月に分解します。 経過日数:date()-[生年月日] 年:year([経過日数])-1900 月:month([経過日数])
お礼
ありがとうございました。
補足
ご回答ありがとうございます。 すみません、ほとんど素人なもので、あまりよく分かっていないのですが。 ご説明の内容はなんとなく理解しました。 ただ、これまで読んできた年齢の求め方の説明に使われていたのが、もっぱらDateDiff関数だったので、DateDiff関数を使わなくても算出できるのかなぁ、ということと(引き算なので同じ計算なのですか?)、教えて頂いた式をそのまま放り込んでいいのかなぁ、という、二つの疑問を持ちました。 試してみるのが一番の答えですね…。
お礼
こんなに詳しく、突っ込んでご回答下さり、ありがとうございました。 ただ単に式を教えていただいただけでなかったことに、深く感謝致します。 本当にありがとうございました。