質問: 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が表示されました。 これは当たり前のことなんでしょうか。このような方法をとらないと、数字の認識は難しいのでしょうか? 教えてください。
回答: こんにちは エクセルだけでなく小数を扱うコンピュータ計算では当たり前の現象なんです(;_;) 詳しいことは、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になるため論理式は成立しません。 エクセルの「ツール」-「オプション」-「計算」タブには「表示桁数で計算する」というのもありますので試してみて下さい。