恐ろしすぎる 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 使ってて、知らなかったよ、この仕様、、、

スポンサーリンク

スマホのみ下に表示