アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelで設定した単純なIF構文の関数で発生している事象です。


あるExcel上の表で、数値を入力後その値の有効性を検算するセルがあります。
2つの方法で入力した値がイコールであれば「OK」、イコールで無ければ「NG」と表示される様に、
IF構文で「=IF(セルA-セルB=0,"OK","NG")」と設定してあるのですが、0であるはずのセルの一部がOKになりません。

単純にこれだけであれば、見かけ0だけど実際は0でないからじゃない?とか思うのですが、以下の様に
(1)セルA-セルBの計算を別のセルで行い、そのセルの値が0かどうか判断するIF構文を組むとOKになる
(2)元の数式を「セルA-セルB=0」から「セルA=セルB」とするとOKになる
など、計算結果としては確実に0になっていると判断しています。

数式自体直してしまえば特に問題は発生しないので重要な要素では無いのですが、何故このような事象が発生するか不思議だったので質問してみました。

条件付き書式などの設定はありません。

使用しているExcelは2010ですが2003でも同様な結果になりました。


もし何か情報をお持ちの方いらっしゃいましたらご教授頂ければ幸いです。

A 回答 (4件)

No.1さん、No.3さんのおっしゃるような、コンピュータが勝手に近似値を使うことによって生じる計算誤差を回避する方法はいくつか考えられると思いますが、ROUND関数で処理することも一つです。

例えばB1セルに誤差を生む可能性のある式が入力されているなら、「=round(b1,5)」といった具合に、「最終的な計算結果に影響を与えないほど小さな端数を除くことのできる適当な桁数で丸める」ということです。これにより、0.1が入力されているセルと0.1の近似値となるセルの差がゼロになるようにできます。ベストアンサーは辞退します。
    • good
    • 4

ご質問の状況は、2進数で表せない小数点以下の数字の演算(特に引き算)を行う場合に発生します。



例えばA1セルに「0.1」と手入力し、B1セルに「=1-0.9」のような演算結果での「0.1」を表示しておくと、=A1-B1は「0」と表示されていますが、実際は「0」ではありません。
例えば、数式を「=(A1-B1)*1」として、そのセルの表示形式を「数値」にして小数点以下の桁数を30桁にしてみると、「0.000000000000000027755575615629 」のように0ではないことがわかります。

一方、=A1=B1とした場合は、「TRUE」を返しますが、これはエクセルで数値を扱う場合、10のマイナス16乗以下の数値はエクセルが自動的に数字を丸めて同じ数字として判断するためと思われます。


このように、2つのセルが等しいと判断される場合でも、引き算すると表示は「0」でも実際の数字は0にならないケースが小数点以下の数字を取り扱う場合(例えば時間を計算する場合など)には頻繁に発生しますので、大小関係を判定する数式などを作成する場合には注意が必要です。
    • good
    • 1

基本中の基本の表示設定で 0を表示しないにチェックはいってるということは無いですか

    • good
    • 1

実際の値のデータが判らないので推測ですが


良くあるケースとして
浮動小数点の丸め誤差の問題があります。
Excel で浮動小数点演算の結果が正しくない場合がある
http://support.microsoft.com/kb/78113/ja
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A