
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.4
- 回答日時:
No.1さん、No.3さんのおっしゃるような、コンピュータが勝手に近似値を使うことによって生じる計算誤差を回避する方法はいくつか考えられると思いますが、ROUND関数で処理することも一つです。
例えばB1セルに誤差を生む可能性のある式が入力されているなら、「=round(b1,5)」といった具合に、「最終的な計算結果に影響を与えないほど小さな端数を除くことのできる適当な桁数で丸める」ということです。これにより、0.1が入力されているセルと0.1の近似値となるセルの差がゼロになるようにできます。ベストアンサーは辞退します。No.3
- 回答日時:
ご質問の状況は、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にならないケースが小数点以下の数字を取り扱う場合(例えば時間を計算する場合など)には頻繁に発生しますので、大小関係を判定する数式などを作成する場合には注意が必要です。
No.1
- 回答日時:
実際の値のデータが判らないので推測ですが
良くあるケースとして
浮動小数点の丸め誤差の問題があります。
Excel で浮動小数点演算の結果が正しくない場合がある
http://support.microsoft.com/kb/78113/ja
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
excel 関数にて文字を0として認識させる方法
その他(Microsoft Office)
-
【エクセル】関数で「A1が0でないならB1を表示」の式
その他(コンピューター・テクノロジー)
-
あるセルの値を認識しないのですが、何が悪いのでしょうか?
Excel(エクセル)
-
-
4
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
5
計算結果が「0」のセルだけを「0」と表示したい。
Excel(エクセル)
-
6
初めて0以外の数値が出てきたときの値を表示(EXCEL)
Excel(エクセル)
-
7
IF関数で0より大きい数値が入力されたら「あ」と表示、文字列の場合は空白としたい
Excel(エクセル)
-
8
Excelで重複データの件数ではなく、何番目かを求める方法
Excel(エクセル)
-
9
Excel 例A(1+9) のように番地のたし足し算の方法を教えてください
その他(Microsoft Office)
-
10
エクセル フィルタ 数値のみ抽出したい
Excel(エクセル)
-
11
値が入っている一番右のセル位置を返す方法
Excel(エクセル)
-
12
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
13
EXCELで条件付き書式で空白セルの時は塗りつぶし無しにする方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba テキストボックスとリフト...
-
数式を残したまま、別のセルに...
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
Excel 例A(1+9) のように番地の...
-
エクセルで太字だけの合計を出...
-
エクセルの書式設定の表示形式...
-
貼り付けで複数セルに貼り付けたい
-
Excelで6桁の文字列を時刻に変...
-
エクセルで複数のデータをセミ...
-
Excelでのコメント表示位置
-
エクセル 足して割る
-
エクセルで指定したセルのどれ...
-
アクティブにするとは?
-
エクセルでセルにページ番号を...
-
VLOOKUP関数の結果セルの右下の...
-
VLOOKUPとハイパーリンクの組み...
-
エクセルのセルの枠を超えて文...
-
c.m.c クラフト点 アルキル鎖...
-
セルの高さ(行高)を求めるには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba テキストボックスとリフト...
-
貼り付けで複数セルに貼り付けたい
-
エクセルで指定したセルのどれ...
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
エクセル
-
数式を残したまま、別のセルに...
-
(Excel)数字記入セルの数値の後...
-
エクセル オートフィルタで絞...
-
エクセルの書式設定の表示形式...
-
Excel 例A(1+9) のように番地の...
-
エクセルの一つのセルに複数の...
-
excelの特定のセルの隣のセル指...
-
EXCEL VBA セルに既に入...
-
Excelでのコメント表示位置
-
エクセルのセルの枠を超えて文...
-
【エクセル】IF関数 Aまたは...
-
対象セル内(複数)が埋まった...
-
Excelで数式内の文字色を一部だ...
-
【Excel】 セルの色での判断は...
おすすめ情報