SSブログ

EXECLワークシートでの簡単JIS丸め

先日、仕事で表をまとめる際に五捨五入(JIS丸め・ISO丸め・銀行丸め)する必要があり、ちょっと調べた。(表をまとめた際は、良い方法が見つからず、手で五捨五入した)

 一番簡単な方法は、いわゆるマクロが使えれば、functionでVBAのround関数を使うことだろう。xRoundとでもユーザー関数を定義してやればすっきり記載できる。
 ただ、ネット上でも記載されているように、EXECLにマクロが入っているファイルは開くときにセキュリティの警告が出る。いろいろな人に配るファイルに五捨五入のためだけに、警告が出ることは避けたい。
 警告が出ずにユーザー関数を保存する方法は、見つからなかった。

 マクロを使わず記述する方法は、ifを用いる方法で、数々方法が紹介されている。紹介されているものには、2つのタイプがあった。
 1つは、偶数・奇数を判別したり、判断文を駆使したもの。
 もう1つは、2倍したり、4で割ったりして丸めるもの。こちらのほうがシンプルで個人的には好きだ。ただし、記載されている方法は、0.5でしか使えない。そのことに気付くのに時間がかかってしまった。
 で、結局、自分で次の式にまとめて、一人で悦に入っている。
 =if(MOD(数字*10^桁数,1)=0.5 , round(数字/2,桁数)*2 , round(数字,桁数) )

 余りが0.5だったら、数字を2で割ったものを四捨五入し、2倍する。0.5以外だったら普通に四捨五入する・・・・これだけです。
 0.5,1.5,2.5,・・・を、半分にすると、X.25かX.75になるので、四捨五入したものを2倍すると偶数にまとまります。
 念のため、ネット上では、2倍した後4で割ってから2倍しているものが紹介されていますので、上式では不都合な場面が発生するのかもしれません。他問題点があるのかもしれません。とりあえず、自分自身で気に入って使っています。五捨五入、四捨六入、JIS丸め、ISO丸め、銀行丸めなどと呼ばれておりますが、数字を丸める際に一般的な四捨五入と5の取り扱いがちょっと異なります。
 四捨五入は、1,2,3,4を切り捨て、5,6,7,8,9を切り上げますが、切り捨てが4つ、切り上げが5つあり、たくさん四捨五入したものを集計/統計すると偏りが出てしまうことがあります。
 そこで、5を一定の条件で切り上げたり、切り捨てて偏りをなくすための決まりがあります。
 詳しくは、他の方が解説されているネット上情報をご覧いただくとして、簡単に言うと丸めた後の数が偶数になるように切り捨て・切り上げを選択する決まりです。

 EXECLでは、厄介なことにワークシートではroundが四捨五入、マクロなどで使用されるVBAではroundは五捨五入なのです。
 VBAではワークシート関数を呼び出せばよいのですが、逆がセキュリティ上ちょっと難点があり、上記のような四苦八苦の末、利用しています。

 ご参考になれば幸いです。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:[必須]
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。