恐ろしすぎる VBA の Round 関数仕様!
恐ろしすぎる VBA の Round 関数仕様!
これは、VBA 始めるなら最初に知っておきたい!というか、知っておくべき謎仕様の事件です!笑
エクセルのセル内に入力する Round 関数。俗に言う、ワークシート関数。
四捨五入してくれる関数です。
4なら、切り捨て。
5なら、切り上げ。
ですね。
だから、例えるなら、
10.5 の小数点第1位を四捨五入すると、11 になるわけですよ。
当然っス!
=ROUND(10.5,0) ⇒ 11
ですね。
これ、VBA だと、10 になるんです!!!
なんでだよ~!!!
i = Round(10.5, 0)
Debug.Print i
これ、実行すると、イミディエイトウインドウに表示されるのは、
10 なんです!!!
にわかな VBAプレイヤーは、これは陥りますよ!
回避策は、
i = Round(10.5, 0)
Debug.Print i
ではなく、
i = WorksheetFunction.Round(10.5, 0)
Debug.Print i
とします。
知らずに使うと恐ろしい VBA の Round 関数、、、
ぜひ、みんなに知っといてもらいたい、、、
この仕様は、「偶数丸め」とか「銀行丸め」!なんて言われるらしいです。
ただ、初めて四捨五入を習ったとき、疑問は感じました。なんで、五捨六入じゃないの?そっちの方が、半分半分じゃん!?って。そんな記憶を思い出したね。遠い記憶です。
今まで、使う機会がなく、時々ではあったけど、数年 VBA 使ってて、知らなかったよ、この仕様、、、