I hate MICROSOFT

私が憎んでいるマイクロソフト社製品の便利小技集
悪い事は言わない、今すぐMS社製品をアンインストールしなさい

丸めいろいろ Round関数

2006-05-02 12:22:49 | I hate MS Excel
どうよこれ。
って何が・・・って感じですよね。
マクロでVBAを使う人以外は関係ありませんが・・・。

| |A |B |C |
| 1|0.5| 1| 0|
| 2|1.5| 2| 2|
| 3|2.5| 3| 2|
| 4|3.5| 4| 4|
| 5|4.5| 5| 4|
| 6|5.5| 6| 6|
| 7|6.5| 7| 6|
| 8|7.5| 8| 8|
| 9|8.5| 9| 8|
|10|9.5|10|10|
|11| 50|55|50|<---=SUM(*1:*10)


A列は数値 B列はExcelのROUND関数の値 C列はVBAのROUND関数の値。
B列数式 : =ROUND(A*, 0)
C列数式 : =MyRound(A*, 0)

Function MyRound(n, d)
  MyRound = round(n, d)
End Function

計算結果が違うでしょう。

そう。プログラムによって関数の返す値が違うんですよ。

ExcelのROUND関数=算術丸め:皆さんが学校で習った奴。
VBAのROUND関数 =銀行丸め:結果が偶数になるように丸め処理。
MS-ACCESS等はVBAのROUND関数の様です。

この他にもランダム丸め、オルタネート丸め等が存在しますが
MSは実装していないのでここでは触れません。
それぞれ .5 の処理が違います。
境界値の処理の問題ですな。
残業代は算術丸めで計算すべきでしょう。あ、俺残業代ないわ。

せめてどれかに統一して欲しかったな。マイクロソフトさん。

これ以上詳しい事は各自学習するように。
もっと詳しく知りたい向学心旺盛な方はこちらへどうぞ。

[OFFXP]VBAのRound関数について

丸めを行うカスタム プロシージャを実装する方法