インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

VBA Roundの罠にやられました。

いつか何かの記事でVBAのRoundは気を付けろ,と書いてあるのを見たことはありました。

でも,その記事にさらっと目を通しただけでは,その大事さはわからなくて,しかもたいした誤差じゃないよなぁと

頭の片隅になんか見たことある,くらいの記憶しか残っていなかったんですが,今日はその影響をもろにくらいました。頭の片隅にはあったので,なんか書いてあったやつか!と思い,時間にするとたいした時間もかけずに対応,修正はできました。

しかし,大事なのは資料のデータに対する信頼を失うことです。けっこう精神的な方でダメージをくらいました。チェックの段階で見つけてくれたので,結局影響はなかったわけですが,

チェックを通り抜けて,そのままそのデータを使って仕事をしていたとしたらと考えると怖い。(;´▽`A``

さて,VBAのRoundは四捨五入の関数ではありません。銀行丸めを行う関数ということらしいです。

実際に支障がありましたので,四捨五入と思ってVBAのRoundを使うことは,避けた方がいいとお伝えします。

f:id:chemiphys:20170210215521p:plain

語弊があるかもしれませんが,小数第一位が5のときに,偶数になるように丸めてしまうという,意味不明な挙動をします。

厳密さを求められる資料には十分致命的な結果を生みかねません。

なので,対処について書いておきます。

今日は私が使っていたのはExcelでしたので,Excelで四捨五入が必要な場合は WorksheetFunction.Round で代用しましょう。こちらはVBAのRoundのような挙動はしません。

WordやAccessVBAだとどうするの,ということですが,ちょっと時間ができたときに調べてたら,

小数第一位を四捨五入して整数にしたい場合は,0.5を足してIntを取る。
f:id:chemiphys:20170210220302p:plain

とてもシンプルなやり方ですよね。これを考える人は賢いなぁ。Powerpointや今からはWordのVBAも積極的に使おうと思っていますので,自分にとってはけっこう大事なことです。

リカバリの効く失敗という形で,VBAのRoundのことを学んだので,しっかり覚えておこうと思います。

そして,もし把握されていなかった方がいましたら,ご注意ください_(._.)_
VBA仲間探索のため,ブログ村に参加しています。
にほんブログ村 IT技術ブログ VBAへ
にほんブログ村