• ベストアンサー

Access2000で、支払残金額を算出する式を作っているのですが、、、

当月の「支払残金額」を求めるために、以下のように式を作りました。 1.「支払開始日」から「支払完了日」まで何ヶ月間あるかを算出。  (例:2002年10月~2003年1月)   [完了日(月)]+([完了日(年)]-[開始日(年)])*12 -[開始日(月)] +1   1 + (2003 - 2002)*12 -10 +1 =4    4ヶ月間 2.「注文金額」を、「何ヶ月間か」で割った「ベース単価」を算出。  (例:注文金額が40000円の場合)   上の式を[式1]として、   [注文金額]/[式1] = 10000 3. 当月の、支払残金額を求める。  (例:当月が10月の場合)  [ベース単価]*([完了日(月)]+([完了日(年)]-[当月(年)])*12-[当月(年)]+1)   10000*{1+(2003-2002)*12 -10 +1}=10000*4 =40000  → 当月から完了日まではあと40000円(支払残金額)。 当月が11月の場合は10000*3であと30000円、、、 という風に計算される仕組みで、これで上手くいったかな?と思ったんですが、、、 これは、「当月」と「支払開始日」が同じ時じゃないと駄目なのですよね。 例えば[当月]が10月、[開始日]が11月、[完了日]が2月、[注文金額]が40000円の場合、 1.何ヶ月間あるか?  2+(2003-2002)*12 -11 +1=4  4ヶ月間。 2.ベース単価 40000÷4=10000円。 3.当月の支払残金額?  10000*{2+(2003-2002)*12 -10 +1}=10000*5 =50000円(! 「完了日」から「当月」までは5ヶ月間なのに、そのまま「ベース単価」をかけてるので、 開始日と当月が一致しない場合は「注文金額」より多くなってしまいます、、、 しかし、上手く計算させるためにどうすれば良いのか判らなくて、 全く行き詰まってしまいました。 「当月」と「開始日」を上手く使えば出来そうな気もするのですが、、、 長々と申し訳ありません。 ばしっと解答を戴けると幸いです。宜しくお願い致します。

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

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

「当月」が「開始日」より前かどうかを判断する分岐を式の中にネストすれば良い のではないでしょうか。 例えばIIf関数で IIf([当月]>=[開始日],[ベース単価]*([完了日(月)]+([完了日(年)]-[当月(年)])*12-[当月(年)]+1)],[注文金額]) この様な分岐で演算させれば[当月]が[開始日]より後か等しければ式を計算し条件 に該当しなければ[注文金額]を持ってくる。 こんな感じでどうでしょう。

yamiyu
質問者

お礼

こんなに早く回答して下さってありがとうございます。 解説して下さった通りに式を書いてみましたら、ばっちり算出する事が出来ました! 昨日から悩んでいた事なので本当に助かりました。本当にありがとうございます!

その他の回答 (1)

  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.2

単純な方法で申し訳ないですが >3. 当月の、支払残金額を求める。 > (例:当月が10月の場合) > [ベース単価]*([完了日(月)]+([完了日(年)]-[当月(年)])*12-[当月(年)]+1)  > 10000*{1+(2003-2002)*12 -10 +1}=10000*4 =40000 この部分で算出期間の判定をもうけます。 if [開始日] > [当月] then [算出期間] = [期間] elseif [終了日] < [当月] then [算出期間] = 0 else [算出期間] = ]*([完了日(月)]+([完了日(年)]-[当月(年)])*12-[当月(年)]+1 end if [支払残金額] = [ベース単価]*[算出期間]  でどうでしょうか? ifじゃなくてselect caseで判定してもいいです。その辺りは臨機応変に。

yamiyu
質問者

お礼

手早い回答をありがとうございます。 こういう式の書き方もあるのですね。単純だなんてとんでもないです! 本当に勉強になりました。ありがとうございました!

関連するQ&A