たとえば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 |
・・・という感じだ。知っている人には当たり前だけど知らない人はよくぶつかる壁だったりする。素直にぶつかって乗り越えればいいのだが、「そんな細かいこと気にして馬鹿じゃねえの」と逆切れする奴もいるな。
昔はきれいな表を提出しても経理にそろばんで全部チェックされ、間違いがみつかると「だからパソコンなんて駄目なんだ」と言われたもので、その頃は必死に勉強したものだった。当時はそういう経理のジジイを恨んだものだが、今となっては役立っている。ありがたいことだ。
あと、PC以前の問題だけど、端数処理をどのタイミングでするのかも社内でルールを決めておいたほうがいいだろう。たとえば原価計算だったら、パーツ一個一個で端数処理をして、それから数量を掛けて合計を出すとか。その辺をまったく考えずにエクセル任せで計算すると、あっという間に1円とか2円合わなくなる。それが100万個売れると・・・ということだ。
エクセルには関係ないけど、昔98ノートの時代に別売りで数値演算プロセッサという部品があって、それをつけると表計算ソフトがとても速く動くという広告が雑誌に輝いていた。真に受けた私はそれを購入(たしか数万円もした)し、装着した。で、計算すると1円合わない。ロータスのサポートに問い合わせてみたら「数値演算プロセッサの機能をオフにしろ」と言われた。結局、数万円払ってパソコンに重りをつけただけになってしまった。パソコン関連の広告ってあの頃から「速さ」だの「力」だのと嬉しい言葉が並んでいるが、あれ以来あまり信用できないのである。
関連:2007/07/23 50円単位で切り上げ
(2010/01/15追記)
intで処理すると、負の数の時に困るかもしれない。=int(-1.1) は「-2」になってしまうのだ。切り捨てはrounnddownの方がよさそうだ。