« 大黒屋光太夫 | メイン | プラグイン »

エクセルの端数処理

 某所から「エクセルで教えて欲しいことがある」と電話が入る。わり算をいくつかやって、それらの合計を出したがどうしても合わないとのこと。答えを小数第二位まで出したいらしい。「端数処理してる?」と聞いたら「やった」との答えだが、どうやってやったのか聞いてみると「右クリックして書式設定・・・」とのことで、原因特定。知っている人はすぐに「アレか」と思うことだろう。

 たとえば30個で242円のモノがあったとする。


A B C
 1  価格 入り数 A/B
 2  242 30
 3                   

一個あたりの値段を手元の電卓で計算すると「8.066666666」と表示される。エクセルだったらC2に「=A2/B2」って入れるわけで、

8.066667

となるはず。これを「セルの書式設定」で表示形式を「数値」にし、小数点以下の桁数を2にして

8.07

としていたらしい。で、たとえばこれを10倍すると「80.70」となって欲しいのに「80.67」になってしまい悩むというトラブルである。

 表示は「8.07」だけど中身には「8.066667」が入っているせいで起きる。これを回避するには端数処理をすればよい。私の場合は

切り捨て → int関数
四捨五入 → round関数
切り上げ → roundup関数

を使っている。切り捨てが rounddown ではなく int なのはDOS版のロータス1-2-3のユーザーだったからだ(実はその前にマルチプランも使っていた)。表の中に小数が出てくるときは必ず使うようにしている(たまに忘れる)。


A B C D E F
 1  価格 入り数 A/B C列×10 C列の式 C列の書式
 2  242 30 8.066667 80.67 =A2/B2 標準
 3  242 30 8.07 80.67 =A3/B3 数値、小数点以下桁数「2」
 4  242 30 8.06 80.60 =INT(A4/B4*100)/100 数値、小数点以下桁数「2」
 5  242 30 8.07 80.70 =ROUND(A5/B5,2) 数値、小数点以下桁数「2」
 6                                     
※ D列の書式設定はすべて数値、小数点以下桁数「2」

・・・という感じだ。知っている人には当たり前だけど知らない人はよくぶつかる壁だったりする。素直にぶつかって乗り越えればいいのだが、「そんな細かいこと気にして馬鹿じゃねえの」と逆切れする奴もいるな。

 昔はきれいな表を提出しても経理にそろばんで全部チェックされ、間違いがみつかると「だからパソコンなんて駄目なんだ」と言われたもので、その頃は必死に勉強したものだった。当時はそういう経理のジジイを恨んだものだが、今となっては役立っている。ありがたいことだ。

 あと、PC以前の問題だけど、端数処理をどのタイミングでするのかも社内でルールを決めておいたほうがいいだろう。たとえば原価計算だったら、パーツ一個一個で端数処理をして、それから数量を掛けて合計を出すとか。その辺をまったく考えずにエクセル任せで計算すると、あっという間に1円とか2円合わなくなる。それが100万個売れると・・・ということだ。

 エクセルには関係ないけど、昔98ノートの時代に別売りで数値演算プロセッサという部品があって、それをつけると表計算ソフトがとても速く動くという広告が雑誌に輝いていた。真に受けた私はそれを購入(たしか数万円もした)し、装着した。で、計算すると1円合わない。ロータスのサポートに問い合わせてみたら「数値演算プロセッサの機能をオフにしろ」と言われた。結局、数万円払ってパソコンに重りをつけただけになってしまった。パソコン関連の広告ってあの頃から「速さ」だの「力」だのと嬉しい言葉が並んでいるが、あれ以来あまり信用できないのである。

関連:2007/07/23 50円単位で切り上げ

コメントを投稿