- 締切済み
Excel 条件付きの条件先が式の場合
Excelでたとえば A1に入力された数値、B1にはA1を引数とした計算結果があるとします。B1の計算結果が0.09だった場合だけC1に1を、そのほかの場合は2を表示させようとしました。 C1に =if(B1=0.09,1,2) の式を入れましたが、B1の計算結果が0.09でもC1には2が表示されます。そこで、C1に =if(int(B1*100)=9,1,2) の式を入れても結果は同じで、D1に=text(int(B1*100),0) の式をいれてからC1に=if(D1="9",1,2) でやっと1が表示されました。 これは当たり前のことなんでしょうか。このような方法をとらないと、数字の認識は難しいのでしょうか? 教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは エクセルだけでなく小数を扱うコンピュータ計算では当たり前の現象なんです(;_;) 詳しいことは、ANo.1さんのメッセージにあるサイトにあるようですので簡単にいうと2進数で計算しているがゆえ10進数を2進数に変換する上で誤差が出る場合があります。例えば2進数は0.5, 0.25, 0.125 (以下半分にした10進数の値の繰返し)といった10進数小数は1/2の繰り返しになるためいくら足しても2で割り切れるので2進数で端数が出ませんが、2で割り切れない10進数を指定されたとき誤差が出ます。つまりその時は近似値になるということです。 ですので判定文の中で小数に対して論理式「=」を使うのは危険です。またエクセルの場合、単に100倍して切り捨てても0.09と表示されている値が0.089を四捨五入して表示している こともあり、この場合整数の8になるため論理式は成立しません。 エクセルの「ツール」-「オプション」-「計算」タブには「表示桁数で計算する」というのもありますので試してみて下さい。
- FEX2053
- ベストアンサー率37% (7991/21371)
=if(int(B1*100)=9,1,2) ここに問題がありますね。こっちなら上手く行ったんですが。 =if(round(B1,2)=0.09,1,2) 理由は#1さんが示されたURLの通りで、小数点以下の数値をチェック するときに四捨五入するのは、Excel使いの間では常識です。
B1に0.09を直接入力すれば意図する動きになるのでしょうけど。 参考までに。