どうよこれ。
って何が・・・って感じですよね。
マクロで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関数について
丸めを行うカスタム プロシージャを実装する方法
って何が・・・って感じですよね。
マクロで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関数について
丸めを行うカスタム プロシージャを実装する方法