RANK関数で同じ数値なのに同順位にならない原因と対処法
ここではエクセルのRANK関数で、同じ数値なのに同順位にならない原因と対処法について解説します。
RANK関数を使って順位を出そうとした場合、同じ値なのに同順位にならないことがあります。そのようなケースの原因と対処法です。
1.まずは問題点を確認
始めに、問題点を例を含めて確認します。
1-1.RANK関数で同じ値が同じ順位にならない
問題点は、「RANK関数で同じ値が同じ順位にならない」ことです。
数値をもとにランキングを求める時にとても簡単なのが、RANK関数を使うことです。
しかし一方で、RANK関数は「同じ値が同じ順位にならない」ことがあります。
根本の原因は解消できませんが、ある関数と組み合わせることで、問題は解消できますので、その説明です。
1-2.例を確認
一つ例を見てみましょう。
上の表は、社員ごとの残業時間で多い人から順に10人をピックアップしたものです。
表内の残業時間合計をもとにランキング(順位)を付けたい時、よく使われるのがRANK関数です。
しかしRANK関数を使うと、上の赤枠のように時々「同じ値なのに同順位にならない」ことがあります。
例では残業時間が4:30の人が3人いるので、3人とも順位は2位になるはずです。しかしRANK関数の結果は、2人が2位で残り一人は4位になってしまいました。
では、表示上は同じ値でも違う値なのか?と時刻表示を10進法に変換してみましたが、小数点以下30桁まで見てみても同じです。つまり3つとも同じ値なのですが、順位は同じにならないのです。
これが「RANK関数で同じ値なのに同順位にならない」現象です。
2.RANK関数で同順位にならない原因
RANK関数で同じ値なのに同順位にならない原因は「エクセルの丸め誤差」と呼ばれる現象によるものです。
丸め誤差とは、長い桁や無限桁の小数を扱う際に、これを有限桁で表すためにある桁以降の値を切り捨ててしまうことにより生じる誤差のことです。
詳しい解説がMicroSoftのホームページにありました。
結局は、見た目同じでも、内部的には違う値になってしまっているということですね。
しかも、何で違う値と認識されているのかは、調べても分からないことが多いのが実情です。
3.同じ値を同順位にする方法
このようなケースの場合、同じ値を同順位にするのに簡単な方法は「ROUND関数を使う」ことです。
ROUND関数は「指定の桁数で四捨五入した値を返す」関数です。
つまり、見た目と内部で違ってしまっている値を、見た目と同じにする、ということです。
例えば、先ほどの表の残業時間をROUND関数で処理すると、次のようになります。
E列にROUND関数を使った数式を入れてみました。そして、順位はこのE列を参照したRANK関数を使っています。
すると、さっきと違って正しい順位が表示されているのが分かります。
なお今回ROUND関数で指定する、四捨五入する桁数を5にしたのは、見た目の値が変わらない最小の数だったからです。
ROUND関数の構文は、次の通りです。
=ROUND(セル番号,桁数)
「セル番号」には、「四捨五入したい値が入ったセル番号」を指定します。
「桁数」には、「なん桁目で四捨五入するか」を数値で指定します。
全ての数値に対して、このROUND関数を使って数値を丸めます。
後は、この範囲に対してRANK関数で数式を作ればOKです。上の表ではDさんも2位と、適切に表示されているのが分かります。
このように「同じ値なのに同順位にならない」場合には、ROUND関数で数値を四捨五入することで解決できますが、RANK関数はこのような現象が頻発するため、基本的にROUND関数とセットで使うことを日頃から習慣付けていたほうが、間違いがありません。
以上、参考になれば幸いです。
【口コミ・評判のいいExcel本の紹介】