2013Excel関数技BEST 51回

フィルタで抽出しても、抽出結果に順位がつくようにしたい

RANK関数で順位をつけた表がありますが、その表にフィルタで抽出をかけると、順位がとびとびになり崩れてしまいます。
これは、RANK関数が非表示の行でも機能しているため、フィルタをかけて表示された結果で、順位がとびとびになったように見えるからです。
フィルタで抽出しても常に表示された結果にきちんと順位がつくようにするにはどうしたらよいでしょう。
今回は、IF関数とSUBTOTAL関数の式を作業列に作成し、その値も元にRANK関数で順位をつけることにします。
(サンプルファイルは、こちらから 2013関数技51回サンプルデータ

フィルタで抽出すると順位が崩れてしまう

店舗別売上表には、RANK関数で順位をつけています。D2セルには以下の式が入っています。
=RANK.EQ(C2,$C$2:$C$13,0)
RANK関数
フィルタで抽出すると、抽出前のランクで表示されます。
これをきちんと、1,2,3,4のように表示したいわけです。
ランク関数

フィルタで抽出しても、結果に順位がつくようにしたい

ここでは、SUBTOTAL 関数を使います。
SUBTOTAL 関数では、集計方法の値にかかわらず、フィルターの結果に含まれていない行はすべて無視されます。
SUBTOTALを利用すれば、非表示行をスキップできるのです。
SUBTOTAL
引数の1は平均、2は数値の個数、3は、データの個数です。
SUBTOTAL引数
作業列をつくります。サンプルでは順位の隣のE列を使います。
SUBTOTAL関数1
関数の挿入ボタン、あるいは数式タブの論理からIF関数を選択します。
論理式にSUBTOTAL(2,C2)と入力します。真の場合には、C2セル、偽の場合には””とします。以上で、OKをクリック。
SUBTOTAL関数2

次のページで、順位のセルに式を入力して完成させましょう。

スポンサーリンク
スポンサーリンク