• ベストアンサー

Accessで契約更新日を出したい

テーブルに「契約日」と「契約期間」フィールドがあります。 「契約日」が「2003/7/8」、「契約期間」が「6」(月数)だとすると、今日現在では次回の「契約更新日」は「2003/1/8」となります。 このように、今日現在における、次回の「契約更新日」が算出されるには、どういう式をクエリなどで立てたらよいでしょうか? Access2000です

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

ある2つの日時の差を取得するにはDateDiff関数を使用します。 ただし、2003/7/1と2000/8/31の差も、2003/7/31と2000/8/1の差も、月数で求めると1になるところに注意が必要な関数です。 つまり、 1.契約日と今日の差を月数で求める。 2.求まった月数を契約日に足し、今日より大きかったら1で求めた月数を、今日より小さかったら1で求めた月数から1引いた月数を経過月数とする。 3.経過月数を契約期間で割り、更新回数を求める。 4.(更新回数+1)*契約期間を契約日に足すことで、次回の契約更新日が求まる。 となります。 ひとつの式で書けないこともないですが、メンテナンスのことを考えて、クエリーで計算項目を追加したら、さらにそのクエリーを元にしたクエリーを作成していくことをお勧めします。 1の値 = DateDiff("m", [契約日], Date()) 2の値 = Iif(DateAdd("m", 1の値, [契約日]) < Date(), DateAdd("m", 1の値, [契約日]), DateAdd("m", 1の値, [契約日]) - 1) 3の値 = Int(2の値 / [契約期間]) 次回契約更新日 = DateAdd("m", (3の値 + 1) * [契約期間], [契約日]) となります。 #試してないんで間違ってるかも・・・

kalmit
質問者

お礼

ありがとうございます。 「2の値」の式の2番目と3番目のDateaddを「1の値」の式(Datediff)に変えるとうまくいきました。 経過月数と更新回数を算出する、という考え方を教えていただき、本当に助かりました お礼が遅くなりましたが、ありがとうございました。

その他の回答 (2)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

>今日現在における、次回の「契約更新日」 契約更新日は経過すると更新してあるという前提であれば 次回契約更新日として =IIf([契約更新日]>=Date(),[契約更新日],DateAdd("m",[契約期間],[契約更新日])) で次回契約更新日を取得できます。

kalmit
質問者

お礼

ありがとうございます。 契約更新日を更新しておく、という操作は今はしておりませんが、参考にさせていただきます。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

DateAdd関数を使用します。 DateAdd("m", [契約期間], [契約日])

kalmit
質問者

補足

ありがとうございます。 説明不足ですみません。 「契約期間」が「6」の場合、6ヶ月ごと(6,12,18…ヶ月ごと)に契約を更新するということになります。 教えていただいた式ですと、第1回目の更新日のみとなりますよね。それを過ぎた半年後以降は、次回の更新日がでてくるようにしたい、という意味でした。

関連するQ&A