• 締切済み

Excelで0(ゼロ)を0と認識していない件

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でも同様な結果になりました。 もし何か情報をお持ちの方いらっしゃいましたらご教授頂ければ幸いです。

みんなの回答

回答No.4

No.1さん、No.3さんのおっしゃるような、コンピュータが勝手に近似値を使うことによって生じる計算誤差を回避する方法はいくつか考えられると思いますが、ROUND関数で処理することも一つです。例えばB1セルに誤差を生む可能性のある式が入力されているなら、「=round(b1,5)」といった具合に、「最終的な計算結果に影響を与えないほど小さな端数を除くことのできる適当な桁数で丸める」ということです。これにより、0.1が入力されているセルと0.1の近似値となるセルの差がゼロになるようにできます。ベストアンサーは辞退します。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答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.2

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

全文を見る
すると、全ての回答が全文表示されます。
  • akiomyau
  • ベストアンサー率43% (555/1280)
回答No.1

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのIF関数でVLOOKUPを論理式で

    こんにちは IF関数を勉強しています、過去の質問履歴のQNo.2489708を参考にさせて頂きましたが私の思うような結果が得られないので教えていただければと思います。 ■数式が=IF(A1="","",IF(VLOOKUP(A1,B3:B5,1,FALSE)=A1,C3,D3)) ■内容ですが 第1のIFで A1はブランクで真 偽の場合次のIF関数 第2のIFで 論理式を使い、A1の値がB3~B5の値と同じ場合と表現し       真の場合C3 偽の場合D3 C3のセルにはOK D3はNGと入っています ■結果  A1に入力した値とB3~B5の数字が合えば『OK』を返してくれるのですが  それ以外の場合のD3の値『NG』を返してくれなく#N/Aを返してきます。 数式がやはり違うのかなー  ■試した事  『OK』と『NG』をセルで指定しているのでここを単純に,"OK","NG"としてみましたが結果は同じでした・・・ ■合わせて  B3~B5のセル書式設定が文字列の場合(01234などの0を先頭に表示する場合セルの書式設定を文字列にしています)は特別な関数を入れ子するのでしょうか? ■いろいろ参考書を買って確認しましたが同じようなケースは無いようです。 ■VLOOKUPを使う理由  じつは、商品毎に別シートへ台帳を作り管理しています。  例えば、『シート名お菓子』に商品コードが無い場合『シート名飲料』を見に行く様にしたいのです。  商品はなるべくコード(数字)にしているのですが、0ゼロから始まる商品コードもあるので四苦八苦考えています・・・このIFとVLOOKUPを使うと幅が広がると思い夢を描いています。その他にMATCH関数でも考えましたが上手く結果が得られず困っています、どうぞ宜しくご教授ねがいます。

  • エクセル 時間の計算について

    ちょっとしたことで申し訳ございません。 時間の計算で少し戸惑っています。 A B 20:00 20:26 上のどこかのセルに =IF(B1>A1,OK, NG) のような式を挿入すると #NAME? となってしまいます。 これは関数名の間違いのときのエラー値とのことですが、 セルの書式設定が間違っているのでしょうか。 よろしかったらご教授願います。

  • エクセルの0値について

    エクセルの0値非表示についての質問です。 過去の質問等を閲覧させて頂きましたが、自分のケースだと計算式が成り立ちませんでした。 0値にしたいセルには数式が入っており、更にそのセルの値を別のセルに数式で返しております。 よって非表示にするだけでは計算がおかしくなってしまいます。 そこでIF関数を使っているのですが、現在の数式では IF(A2="","",IF(B1="","",COUNT(B2:G2))) といった感じです。 A2には商品名、B1には日付、そしてB2からG2までには売上データが入力されています。 エクセルの表には1ヶ月分のデータ入力用のフォーマットが出来ています。 A  B  C  D  E  F  G -- 1日 2日 3日 4日 5日 6日 商品 20 50 30 40 60 40 商品 20 50 30 80 40 30 商品 70 80 50 50 90 30 以上、文章がヘタで分かりにくいとはおもいますが、よろしくお願い致します。

  • EXCELで

    いつもお世話になります。 EXCELで次のようなことをしたいのですが、教えてください。 例 A1~A60セルに1~60の数字がランダムに入ります。 E1~E60セルにそれぞれ違った数式が入っています。 BセルにAセルに入れた数字のEセルの数式を使った計算結果を表示したいのです。 B1=E(A1の値)の数式を使った計算結果 どなたか宜しくお願いします。

  • エクセル IF関数について

    IF関数について、皆様に質問です。 セルに入力された数値xがある数値yと同じか大きい場合は"NG"と表示し、数値aがある数値bと同じか小さい場合は"NG"と表示させたいと考えております。 IFを使って式を作成したのですが、『数式が多すぎる』というエラーになってしまいます。 具体的には、 セルB25に入力している数値が8.980の場合、 8.991と同じまたは大きい場合は"NG"と表示させたい。 同じセルB25で、8.969と同じまたは小さい場合は"NG"と表示させたい。 これをこのような式にしてみました。 =IF(B25<=9.991,"NG","",IF(B25>=9.969,"","NG")) これで『数式が多すぎる』というエラーになっています。 教えてgooで調べたのですが、解決には至っていません。 どなたかご教示いただけますでしょうか。

  • エクセルで同じ式なのに、数値によって値が変わる

    助けてください。 非常に簡単な式ですが、数値によって結果が違い困っています。 a-bが許容内であるか場合"OK"、許容差外の場合"NG" という数式を以下のように作りました。 (本当はもう少し複雑ですが、便宜上簡単にしました) =IF(A2-B2<=C2,"OK","NG") 添付の画像を見ていただくと分かりますが 29.90-29.30=0.60 結果"OK" 30.00-29.40=0.60 結果"NG" 同じ数値であるにも関わらず、結果が違い困っています。 小数点2以下は全てゼロです。 色々試したところ、どうやらcの値の大きさで計算結果が変わるようなんです。 どなたかお詳しい方、ご解説ください。 よろしくお願い致します。

  • EXCEL 数式が入った空白セルを数える

    毎度お世話になっています。 質問の内容ですが、例えば下記のようなシートがあるとします。 セルB1、セルC1、セルD1:手入力セル セルA1:数式「=IF(B1="","",B1+C1)」 セルA2:文字列 セルA3:数式「=IF(D1="","",D1*0.1)」 セルA4:文字列 セルA5:A1+A3の計算結果を表示 (※なお、セルA2、A4は数値が入らない) というような場合において、 ●セルB1、C1、D1になにも入力されていない場合、セルA5が空白となる。 ●セルB1、C1にのみ数値が入力されている場合、セルA5の計算結果がセルA1の値のみ。 ●セルD1にのみ数値が入力されている場合も上記と同様に計算結果が表示される。 以上の条件を満たす数式をセルA5に入力したいのですが、 COUNTBLANKは数式が入っている場合には使えず、COUNTAの場合だとセルA1、A3のどちらにも数値が入った場合に表示される、といった数式になります。 IFをいくつも使えば可能とは思いますが、もう少し単純に数式を作れたらと思い質問をさせて頂きました。 よろしければ御回答宜しくお願い致します。 (内容を訂正したため、いったん質問を削除しました。もし御回答中の方が居ましたら申し訳ありませんでした。)

  • EXCEL 数式どうすれば?

    よろしくお願いします。 [A1]+[B1] と [C1]+[D1]+[E1] のどちらか 計算結果の値が小さい方を[F1]に表示するには、 [F1]にどう数式を入れていいのか、がわかりません。。。 それぞれの値をいったん表示して、ふたつのセルをIFする、 段階をふんでシンプルにすればできるのですけど、 いっぺんに結果だけ出したいです。

  • エクセルのIF関数とVLOOKUP関数について教えてください。

      A B C 1 A1 B1 C1 2 A2 B2 C2 ・ ・ ・ 上記のような表があり、セルX、Yに入力した値が2つの条件に合致した場合、セルZにC列の値を返すような数式を作っています。 たとえば、セルXの値がA1より小さく、かつ、セルYの値がB1より小さい場合にはセルZにC1の値を表示する、という数式を作りたいのです。 (ちなみにAn、Bn、Cnにはそれぞれ数字が入ります) =IF(AND(X<=A1,Y<=B1),C1,IF(AND(X<=A2,Y<=B2),C2,・・・ AND関数を利用してこのように数式を入れると、途中まではうまくいくのですが、引数が多いため途中からエラーが出てしまいます。 (引数の数は10個以上あります) IF関数とVLOOKUPを組み合わせればいいというところまではわかるのですが、どのように条件設定をすればいいのかがわかりません。 エクセル初心者で恐縮ですが、どなたか詳しい方いらっしゃいましたらご回答よろしくお願いいたします。

  • EXCEL(エクセル)の関数について

    こんにちは、お世話になります。 エクセルの数式で困っており、ご教示頂きたいです。 C1のセルに、値を返させたいのですが、 A1の値が◆でB1が空白セルでなければ◇ A1の値が●でB1が空白セルでなければ○ A1の値が▲でB1が空白セルでなければ△ A1の値が■でB1が空白セルでなければ□ 、と返させたいです 全ての条件が満たされない場合は空白セルを表示させたいのですが、これを可能にするにはどのような数式を用いればよいでしょうか? 宜しくお願いします。

このQ&Aのポイント
  • USBレシーバーを使用してBluetooth接続することは可能ですか?
  • エレコム株式会社の製品で両方のデバイスを接続することができるのでしょうか?
  • 会社のPCでBluetooth接続ができない場合に便利な方法をお教えください。
回答を見る

専門家に質問してみよう