日々改善ブログ

業務改善や効率化の小技やアイデアを書き留めます

Excelの計算は信用できない?

世の中には、Excelの計算は信用できないから、電卓で再計算させることがあるとか。

阿保かい。

ところが、実はExcelは結構計算間違いすることがあります。

計算間違いその1:小数の引き算にご注意

Excelクイズです。セルA3に表示される結果は?

f:id:rbtgr:20190714185751p:plain

 当然TRUE?試してみましょう。

f:id:rbtgr:20190714185818p:plain

なんとFALSEと表示されているじゃないですか。

どういうこと?Excelがこんな簡単な計算をまちがえるの?

 なぜ0.1同士で等しくないのか?その理由は「本当の値」にあります。

「小数点以下の桁数を増やす」を15回ほど押してみましょう。

f:id:rbtgr:20190714190103p:plain

なんと1.2-1.1は0.1ではなく、0.0999999999999999となっています。

なにこれ?バグ?

いいえ、これは仕様です。ExcelIEEE 754という規格に従って小数を扱っています。

Excel で浮動小数点演算の結果が正しくない場合がある

IEEE 754は、本来は2進数しか使えないコンピュータで、10進数の数値を扱うための規格です。 ここで問題になるのが、小数の2進数変換です。0.1や0.2などの小数は2進数では、循環小数となってしまいます。 たとえば、0.1を2進数に変換すると0001100110011100110011 (以下繰り返し)となります。

無限に桁を使えるワケはありませんから、途中で切り捨てが発生します。結果として、1.2-1.1=0.0999999999999999という、おかしな結果になるわけです。

疑問1 仕様?明らかに計算間違いなんだから修正されないの?

 されないと思います。昔から有名な現象ですが、修正される気配がないです。

疑問2 なんで足し算は大丈夫なの?

 よくわかりませんが、Excelがうまいことやってくれてるみたいです。

計算間違いその2:有効桁数にご注意

再びExcelクイズです。セルA1、A2の計算結果は?

f:id:rbtgr:20190714192728p:plain

どうせ変な結果になってるだろうって? そうだよ。

f:id:rbtgr:20190714192827p:plain

これも、小数の問題と同じく、IEEE 754に基づく仕様動作です。 IEEE 754の規定では、数値を有効桁数15桁の精度で格納するため、15桁に収めるように切り捨てや切り上げが発生しているのです。 このため、大きな桁と小さな桁の計算ではよく誤差が発生します。

科学的な解析や、金利の会計など、非常に大きな数字と小さな数字を正確にあつかうのは、Excelには難しいです。

結論:やっぱ信用できないじゃん。やっぱ電卓だな。

馬鹿なことやってるんじゃありません。 何処に間違いがあるかわからないから、全部計算しなおすなんて、時間の無駄です。

注意が必要なのは、以下のケースです。

  • 小数を含む引き算では誤差が生じることがある。
  • 有効桁数は15桁で、それを超える精度の数値を扱うと誤差が生じる。

単なる整数の足し算の集計なら、まず誤差が出るようなことはないです。

小数の引き算を使うときは、整数にしてから計算し、小数に戻す、などで対処できます。

15桁以上の精度で正確に計算する必要のある、科学計算や会計処理は専用のシステムを使いましょう。 それらをExcelでやろうというのがそもそも間違いです。