ROUNDUP関数の結果について/EXCEL

以下のような計算をしたところ、ROUNDUPの結果が見た目と違うようであるのですが、何か数式以外の点での設定が影響しているのでしょうか?

ご存じのことがありましたら、アドバイスよろしくお願いいたします。

小数点以下1桁揃えになるように切り上げをした結果、ROUNDUP式のみでは、同じ表示結果となりますが、

その表示結果の値を参照すると、違う値として認識されます。

全部がそうであれば、納得もできるのですが、0.8と0.3の場合のみ、異なった値として処理されます。

何か事情があるのでしょうか。

ROUNDUPで丸めた結果が同じ表示結果のものは、同じ値として処理したいのですが、何か方法はありますでしょうか。

列1 列2 値1 ROUND(値1,1) ROUNDUP(値1,1) VLOOKUP(ROUNDUP,列1:列2,2,FALSE) VLOOKUP(ROUND,列1:列2,2,FALSE)
1 0 0.8 0.8

0.8

2

2
0.9 1 0.75 0.8

0.8

#N/A

2
0.8 2 0.52 0.5 0.6 4 5
0.7 3 0.6 0.6 0.6 4 4
0.6 4 0.49 0.5 0.5 5 5
0.5 5 0.38 0.4 0.4 6 6
0.4 6 0.22 0.2

0.3

#N/A

8
0.3 7 0.3 0.3

0.3

7

7
0.2 8 0.05 0.1 0.1 9 9
0.1 9 0.04 0 0.1 9 #N/A

よろしくお願いいたします。

 

質問情報


最終更新日 2019年11月11日 表示 2,562 適用先:
回答
回答

提示されている表で、ご質問の状況を確認できました。

今回のケースは小数点以下の数字を取り扱う時の丸め誤差が影響しているケースの一つですが、ROUNDUP関数などごく一部の関数で発生する、非常にまれなパターンといえます。

http://pc.nikkeibp.co.jp/pc21/special/gosa/eg3.shtml

すなわち、0.22をROUNDUP関数で「0.3」にした値は正確には手入力した「0.3」よりも大きい(正確に同じ数字ではない)ことが以下の数式からわかります(バージョンによって最終的な誤差の処理が少し違うようです)。

=$A$9-F8<0

>ROUNDUPで丸めた結果が同じ表示結果のものは、同じ値として処理したいのですが、何か方法はありますでしょうか。

このようなケースでは(手入力と同じデータに変換するには)、以下のような数式で返る数値をいったんTEXT関数でテキストに変換し、それに1を掛けて値化するのが最も簡便な対応です。

=TEXT(ROUNDUP(D2,1),"0.0")*1

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。

回答
回答

マックちゃんが詳細に検討して下さったので、原因ははっきりしましたね。

という事で一般論なんですが、Excelの関数(実はExcelの関数に限った話ではなくコンピュータ全般で)で、

浮動小数点(小数点以下のある数字)に対して完全一致を要求するのはトラブルの元です。

これは、IF関数の論理式、VLookup、Hlookup、Lookup、Match等すべてにおいて言えます。

Macちゃんが一例を示しておられますが、こういう場合テキストに直して比較するか、作業列に検索列を整数化したものを用意してそれに対して検索をかけます。

この場合は小数点以下一桁のようですから

=Int(Roundup(D2,1)*10+0.000001 )

微小数を足しているのは、計算結果が見かけよりわずかに小さくなっているような場合、Intで桁落ちさせないための保険です。

参考まで。

この回答で問題は解決しましたか?

役に立ちませんでした。

回答としてマークしていただきありがとうございます。

この返信の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。今後のサイト改善に役立てて参ります。

この回答の満足度をお教えください。

フィードバックをお送りいただきありがとうございます。