VBA Roundの罠にやられました。
いつか何かの記事でVBAのRoundは気を付けろ,と書いてあるのを見たことはありました。
でも,その記事にさらっと目を通しただけでは,その大事さはわからなくて,しかもたいした誤差じゃないよなぁと
頭の片隅になんか見たことある,くらいの記憶しか残っていなかったんですが,今日はその影響をもろにくらいました。頭の片隅にはあったので,なんか書いてあったやつか!と思い,時間にするとたいした時間もかけずに対応,修正はできました。
しかし,大事なのは資料のデータに対する信頼を失うことです。けっこう精神的な方でダメージをくらいました。チェックの段階で見つけてくれたので,結局影響はなかったわけですが,
チェックを通り抜けて,そのままそのデータを使って仕事をしていたとしたらと考えると怖い。(;´▽`A``
さて,VBAのRoundは四捨五入の関数ではありません。銀行丸めを行う関数ということらしいです。
実際に支障がありましたので,四捨五入と思ってVBAのRoundを使うことは,避けた方がいいとお伝えします。
語弊があるかもしれませんが,小数第一位が5のときに,偶数になるように丸めてしまうという,意味不明な挙動をします。
厳密さを求められる資料には十分致命的な結果を生みかねません。
なので,対処について書いておきます。
今日は私が使っていたのはExcelでしたので,Excelで四捨五入が必要な場合は WorksheetFunction.Round で代用しましょう。こちらはVBAのRoundのような挙動はしません。
WordやAccessのVBAだとどうするの,ということですが,ちょっと時間ができたときに調べてたら,
小数第一位を四捨五入して整数にしたい場合は,0.5を足してIntを取る。
とてもシンプルなやり方ですよね。これを考える人は賢いなぁ。Powerpointや今からはWordのVBAも積極的に使おうと思っていますので,自分にとってはけっこう大事なことです。
リカバリの効く失敗という形で,VBAのRoundのことを学んだので,しっかり覚えておこうと思います。
そして,もし把握されていなかった方がいましたら,ご注意ください_(._.)_
VBA仲間探索のため,ブログ村に参加しています。
にほんブログ村