- ベストアンサー
(Excel)RANK関数で同じ値なのに違う順位になる
Excel2000を使用しています。 下記の表を作成して、 F列には、=SUM(A1:E1)-MIN(A1:E1)-MAX(A1:E1) G列には、=RANK(F1,$F$1:$F$4) を入力していますが、 F2とF3は同じ値になるのに順位が違って出てきます。 確か、RANK関数は同値の場合同じ順位が出てくると思うのですが、 そうならないので困っています。 ちなみに、F列に数式ではなく計算結果を直接入力した場合には 同じ順位が出てきました。 どうしてそのようなことになってしまうのでしょうか? ご存知の方がいましたら教えてください。 (A) (B) (C) (D) (E) (F) (G) 9.50 9.20 9.35 9.60 9.45 28.3000 1 9.40 9.30 9.35 9.55 9.45 28.2000 2 9.20 9.45 9.40 9.35 9.55 28.2000 3 9.45 9.30 9.30 9.40 9.50 28.1500 4 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
計算精度の問題です。 計算処理をおこなうと、0が 0.00000・・・・01になる場合 があります。 そのため、見た目は一致しているけれど 異なる値になっていると思われます。 ツールメニュー・オプション・計算方法・ 「表示桁数で計算する」のチェックをON して試してください。
その他の回答 (3)
- fukkyse
- ベストアンサー率32% (130/402)
詳細については、この場では説明しにくいので、 「Excel 浮動小数点」などで検索してみてください。 仮に、A1に=0.3-0.2-0.1とA2に=0.3-0.2-0.1+0として 二つの値を表示桁数最大で比較してみてください。 小数点以下の演算については、このような演算誤差を含みますので、正確を期する場合には、「整数として行う」または、誤差が生じない範囲での「ROUND関数の利用」などを行ったほうがよいと思います。
お礼
教えてくれた数式を入力してみると誤差が確認できました。 どうもありがとうございました。
- DoragonFang
- ベストアンサー率41% (91/221)
おそらく、F列の計算結果が、小数桁十何桁かで違っているのでしょう。 計算誤差と言われるもので、ご存じ通りコンピュータは2進数で計算します。また、EXCELは内部計算を小数点以下16桁まで計算します。この際に本来2進数で計算したものを10進数に標記する際に誤差が生じる場合があります。 対策としては、F列の式を =ROUND(SUM(A1:E1)-MIN(A1:E1)-MAX(A1:E1),3) とROUND関数などで丸めると微少な誤差を解消できます。
お礼
なるほど、小数点以下16桁まで計算に使用しているのですね。 勉強になりました。 どうもありがとうございました。
- shinkun0114
- ベストアンサー率44% (1553/3474)
これは、F列の計算結果に微少な誤差が生じているためです。 小数点以下はるか下の方の誤差なので、通常は気にしなくても よいレベルなのですが、比較をするときはこの誤差が現れることが あります。 解決策としては、F列の値を =ROUND(SUM(A1:E1)-MIN(A1:E1)-MAX(A1:E1),4) このように必要桁数以下を丸めてしまうことで、 誤差が無くなり、ご希望の順位表示となります。 お試しください。
お礼
解決策も含めて教えていただきありがとうございました。 参考にしていきたいと思います。
お礼
回答ありがとうございます。 誤差かなぁとは思いつつ、今回の場合、少数点以下の表示桁数を増やしても同じ値だったので違うのでは、と思っていました。 オプションの設定の設定項目を教えてくれてありがとうございます。 参考にさせていただきます。