• ベストアンサー

エクセルは少数点以下の計算が苦手?

少数点以下何桁かある少数の数値を20個ほど合計し、ぴったり100になる(手で計算しても)のですが、その合計を入れたセルが100であればtrueとするVBAを組んだら、なんとfalseがかえってきました。 計算違いではありません。 そういえば以前エクセルは少数計算が不得意だから少数がある場合はすべての値を1000倍するなりして計算し、最後に1000で割ればいいようなことを聞いたことを思い出しました。ほんとうでしょうか? ほんとうだとすればなぜそんなことが起きるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#102878
noname#102878
回答No.1

エクセルだから、じゃなくてコンピュータだから小数点の計算が苦手なのです。 丸め誤差と言います。 http://www.fuka.info.waseda.ac.jp/~kozo/suuchi/value/value_2.html http://www.kei-ha.co.jp/mag/mag0043.html http://www001.upp.so-net.ne.jp/excel/trouble18.htm

shishishishi
質問者

お礼

いやあ、おどろきました。 勉強になりました。 ありがとうございます。

その他の回答 (3)

  • kiriku
  • ベストアンサー率41% (195/468)
回答No.4

浮動小数点演算につきものの話で、エクセルだから発生する訳ではありません。 VB Editorのイミディエイトウィンドウで, 仮に合計値がMySumとすると、? MySum - 100 の結果を表示してみてください。 E-13 あたりで誤差が出ていると思います。 ABS(MySum - 100) < 0.0001 といった条件式で、誤差が一定範囲内ならTrueとしてはいかがでしょう?

shishishishi
質問者

お礼

なるほど。 それでしたら、最初から小数ではなくして計算しようと思います。 おどろきました。 ありがとうございます。

  • ceita
  • ベストアンサー率24% (304/1218)
回答No.3

EXCELの問題というよりもコンピュータの問題なのかも知れません。 コンピュータでは数を小数の場合と整数の場合で分けて管理しています。 また、小数を2進数で表す際に誤差が生まれてしまいます。 ですので、人間が計算してぴったり100になると思っていても、 コンピュータ内部では100.00001とか言う風にわずかの誤差を含んでいます。 しかし、整数として扱う際には100は小数以下まで0であるという状態で管理されるので、 小数と整数を単純に比較しようとすると、 100.0001=100という風な計算になっている可能性があります。 ですのでこういった場合には 99.5以上100.5以下と言った感じで誤差をどこまで許すかまで考えたプログラムが必要になると思います。

shishishishi
質問者

お礼

なるほど。 それでしたら、最初から小数ではなくして計算しようと思います。 おどろきました。 ありがとうございます。

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.2

そうですね、小数点の計算は苦手です。 http://homepage2.nifty.com/housaka/kitan01a.html はちょっと批判的ですが http://pc21.nikkeibp.co.jp/pc21/special/gosa/index.shtml なら馴染みやすいかな。

shishishishi
質問者

お礼

いやあ、おどろきました。 勉強になりました。 ありがとうございます。

関連するQ&A