- ベストアンサー
金額計算で発生した不具合と解決方法
- 金額計算表で利用時間が入力した値と異なる金額が表示される不具合が発生しました。式の改善が必要です。
- 単価が525円で利用時間が1:30の場合、787.5円が切り捨てで787円になるようにしたいです。解決方法はありますか?
- 金額計算表の式の改善と小数点の切り捨てについてアドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> どうやら利用時間の1:30を2:00として計算されてるようです 申し訳ございません、私の方で勘違いしていました。 前回、「ROUND」関数と書きましたが、これは間違いで、正しくは「MROUND」関数を使うべきでした。 つまり、 「INT(C1*D1*E1*24)」の代わりに「INT(MROUND(C1*24,0.01)*D1*E1)」、 「INT(C1*E1*24)」の代わりに「INT(MROUND(C1*24,0.01)*E1)」、 となります。 ただし、「MROUND」関数を使用するには、エクセルに一工夫が必要で、 「メニューバーの【ツール】→【アドイン】で【分析ツール】を有効にする」必要があるそうです。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/round.htm#mround 今度こそ、これで大丈夫…だと思います(汗)。
その他の回答 (1)
- yumitsuki
- ベストアンサー率52% (167/321)
先程は失礼しました。もともとINT関数を利用されていたのは、消費税の端数を切り捨てるためだったのですね。思い至りませんでした。 今回は、問題を2つに分けて考えてみました。 一つは、計算を行う際に発生する小数点以下の誤差を修正すること。 もう一つは、消費税の計算で発生する小数点以下の端数を切り捨てること。 前者については、恐らくは時間を内部的に小数として扱うエクセルの仕様が原因だと思います。そこで、C1の乗算ではROUND関数を用いる必要があると思います。 後者については、E1の乗算でINT関数を用いれば良いと思います。 まとめますと、 「INT(C1*D1*E1*24)」の代わりに「INT(ROUND(C1*24,0.01)*D1*E1)」、 「INT(C1*E1*24)」の代わりに「INT(ROUND(C1*24,0.01)*E1)」、 これでいかがでしょうか? なお、「ROUND(C1*24,0.01)」の部分は、小数点以下1桁まで残すように設定してあります。これは、1.5時間、などの値を正確に扱うためです。1.25時間など、小数点以下2桁まで残す必要がある場合は、「ROUND(C1*24,0.001)」にする必要があります。
お礼
こちらの情報不足にも関わらず、丁寧な回答をいただきありがとうございます。 629円と表示される所は630円と表示され解消しましたが、単価が525円で利用時間が1:30のときの金額が1050円となってしまいます。どうやら利用時間の1:30を2:00として計算されてるようです・・・。どこを修正したら良いでしょうか?
お礼
どうもありがとうございました。問題は解決しました。