パソコンのトラブル、インターネットのトラブル、中古パソコンの購入など、自分の体験した物から、調べたことをまとめています。

TopAccessRound関数と四捨五入

Round関数と四捨五入

緒方典子氏(aka 「魔法使いの開発工房」のニキータさん)彼女の書籍「Access VBA 開発工房」でVBAの習得を目指しています。

第2章で「Accessにはround関数が用意されており、これを使えば任意の桁で数字を丸めることができるんですが、数字を丸めることと四捨五入は、ほんの少しだけ結果が異なります。」とあった。
「えっ?違うの?どう違うの?」と疑問に思い、ネットで「四捨五入 round」をキーワードにグーグルで検索。検索トップの「SE 市井賢児のメモ」(http://ichy.seesaa.net/article/2842259.html )と言うブログで、その違いについて丁寧に説明がありました。違いはほんとに少しなんだけどね。簡単に言うとRound関数は「偶数丸め」で「四捨五入」とは異なるということです。詳しくは上記ブログを参考ということで。
あら!しまった。この前職場の経理の人にエクセルのシートで四捨五入をする方法を質問されて「round関数を使ってください」って教えたよ。
だけど、検索で次にヒットしたサイト(「インストラクターのネタ帳」っていう有名なブログですけどね。)では、その違いについては言及されてない。

それで、腑に落ちないので試してみました。
VBAのRound関数とExcelの組み込みのRound関数で同じ数字を丸めて、その結果を比較して見ます。

VBAのRound関数は標準モジュールに

Public Function gonyu(kazu As Variant, ketasuu As Integer) As Variant
gonyu = Round(kazu, ketasuu)
End Function

とコードを書いてVBAのRound関数を使用する自作関数を作りました。
セルに「=gonyu(A2,1)」と書けばA2セルの値を小数第1位で丸めた値を得ます。
一方、EXCELのほうは「=ROUND(A2,1)」と書いてEXCELの組み込み関数を使って数字を丸めます。
その結果がこれ。
round_test.jpg
1.25で異なる結果が出ています。
EXCELのほうは1.3ですから、四捨五入をしたことになりますね。
だけど、VBAの関数では1.2になってますから、これは偶数丸めをしたということです。

同じRound関数しかも同じマイクロソフト・オフィスなのにどうしてですかね。
「SE 市井賢児のメモ」を参考に推測すると、Round関数が四捨五入と違うことは知っている人には当たり前の話だそうで、つまりSEやプログラマには当たり前の話ということでしょう。おそらく、VBA以外の言語でもRound関数は偶数丸めになっているのではないでしょうか。

EXCELはSEやプログラマよりもほとんどエンドユーザーが使用します。それに日本では「丸め」と言えば「四捨五入」が一般的。(しかし、会計の世界ではどうなんですかね?)

SEやプログラマは「四捨五入」の結果を得るための常套手段があって、自分で四捨五入関数を作る事が当たり前のことかもしれませんが、エンドユーザーはそういう訳にはいきません。

それで、EXCELではRound関数を「偶数丸め」ではなく「四捨五入」にしたんじゃないかなと推測します。
なので、もしかしたら日本用のEXCELだけかもしれないですよね。

まあ、この辺はまた暇な時に気になったらということで。

因みに緒方典子akaニキータ氏の「魔法使いの開発工房」はAccessを学ぶのにとてもすばらしいサイトです。しかし、去年(2006)の11月くらいから、サイトが見れなくなりました。随分とお世話になっていたので残念ですが、無料であれだけの教えてくれるのは稀なことです。今までタダで学習できていたことの方が特別なことです。
結局、サイトが見れなくなった事で本を購入したわけですが、評判どおりお金を払う価値のある本です。

Access VBAプログラミング開発工房 入門・基礎編


投稿日:2007年02月11日|カテゴリー:Access このエントリーをはてなブックマーク

関連記事はカテゴリー・アーカイブから→ カテゴリー「Access」のアーカイブ

Sponcerd Link

免責事項

当サイトに掲載されている情報に関しては、正確な情報になるよう細心の注意を払っておりますが、その信用性、正確性、妥当性等について保証するものではありません。当サイトおよびそのリンク先のサイトに掲載されている情報等により生じたトラブル並びに被った損害については、当サイトは一切の責任を負いかねます。