EXCEL

なぜ? 値が同じなのに、IF 関数はTrue 判定しないのか? 丸め誤差

この記事は、Excelにおける、見た目上のおかしな判定について、お話しします。 あなたも、こんな経験があんじゃないですか。 丸め誤差 についてでです。

「計算した結果をIF関数で判定して、合格/不合格を表示したいんだけど、なんだか結果がおかしい」とか、「表示されている値は同じなのに、イコール判定できない」などです。もしかしたら、次のようなことが起こっているかもしれません。

ひとつは、単純に表示の書式設定の問題で、小数点以下が表示されていない場合
もう一つは、演算でごくわずかな誤差が生じたため、起こる場合です。

Excelなどコンピュータの中では、私たちが計算に使っている10進数ではなく、二進数で計算していることに起因するものです。

もし、計算した結果をIF関数で判定してうまくいかない、といった時に悩まないよう、『あーこんな事があるのだな』くらいにでも知っておけば、後でお話しする対応策で、無駄な時間を消費しなくて済むようにしてください。

EXCELLの IF関数 の判定がおかしい | ケース1

Excel の IF 関数が、おかしな判定結果となる、思ったように判定されない、と言ったことに遭遇しました。

表示されている値(A)=1000、(B)=1000、(C)=(A)-(B)の時、IF(C=0, “一致”, “不一致”)の結果が、”不一致”になってしまうという現象です。

計算結果(D3)をIF関数で0と比較して真か偽かを判定する。 表示された値は同じで差は 0 なのに “一致” と表示されない!

えっ!?なんでだ?となりますよね。では小数点以下を表示してみましょう。

実は、次の図のように、小数点以下を表示してみると、A(B2)の値は1000.3、B(C3)の値は1000で、C(D3)は0.3となっていて、判定は間違っていませんでした。

あれ、変だな?!と思ったときは、まず、この事を確認してみましょう。

EXCELLの IF関数 の判定がおかしい | ケース2 丸め誤差

ケース1の例で、引き続き見てみましょう。

今度は、1000.3 から 1000.0 を引いたのだから、(C)結果と 0.3 をIF関数で比較します。これで、大丈夫のはずです。どうでしょうか?

丸め誤差

あれ?!やっぱり “不一致” となります。

小数点以下の表示桁数を増やして見てみましょう。

AとBは間違いなく、A(B3)1000.3とB(C3)1000.0でした。
しかし、C(D3)の値が0.2999・・・6で、0.3 ではありません。これでは、一致とならなくて正解。

でもなぜ、こんなことに。。。

これが、演算誤差です。
本当は、引き算の結果は0.3となるところですが、そうはならない場合があるということです。

演算誤差への対応方法 | ROUND 関数 丸め誤差

では、どう対応したら良いのでしょうか。

それは、表示で必要な桁数で小数点以下の数値を丸めて、処理します。

演算誤差は、ごく僅かです。桁数にして、小数点以下11桁目とかそれ以下ですから、必要な桁で四捨五入しておけば、大抵は大丈夫でしょう。

このケースでは、小数点以下2桁目を四捨五入して、小数点以下1桁にまるめます。

D3セルの引き算の演算結果を、ROUND 関数で小数点以下1桁に丸めることで、判定が正しく行われました。

このように、表示と実際の結果、判定結果が全て一致するように、整えて使うと、あれ?ということが無くなります。

コメント

タイトルとURLをコピーしました