ある数字が特定の範囲内で何番目の順位かを調べるにはRANK関数を使う(図1)。試験の順位を求めるときなどに便利だが、RANK関数は「同じ数字は同じ順位を返す」という大きな特徴がある。図1では鈴木さんの79点と黒沢さんの79点が同じ点数なので、2人とも第2位と判定された。

 だが、同じ数字であっても異なる順位を決めたいときがある。たとえば、第2位が2人になったが、第2位の商品や賞状を1つしか用意していなかった場合などだ。そんなときは、鈴木さんか黒沢さんのどちらかに第3位として泣いてもらうことになる。これをワークシート関数で自動化してみよう。ここでは計算を簡単にするため、同点だった場合はリストの下に入力されている人を上位とする。

 問題になるのは「3」行目の「79」点と、「5」行目の「79」点だ。どちらも得点だけを見ると違いはないが、入力されている行番号が異なっている。これを利用して、3行目の得点を「79.003」、5行目の得点を「79.005」と変換できれば両者に差が出てくる。つまり、得点をそのまま判定するのではなく、「得点+行番号÷1000」をRANK関数で調べればいいのだ。

 図2はC列で一度「得点+行番号÷1000」を計算している。これは、RANK関数内では引数の計算が許されていないからだ。行番号を1000で割ったのは、本来の得点に影響しない非常に小さな数字を加えたかったためだ。100でも10000でもかまわない。D列にRANK関数を入力して順位を表示したのが図3。C列の仮計算がジャマなら、列を非表示にすればいい。

図1 順位を返すRANK関数は、同じ数字には同じ順位を返してしまう


図2 C列で「得点+行番号÷1000」を算出した。行番号を取得するにはROW関数を使う


図3 今度は同じ順位にならない