条件をつけてグループ別ランキングを表示!エクセルでRANKIFのような順位を表示

条件をつけてグループ別ランキングを表示!エクセルでRANKIFのような順位を表示 1024 624 Biz Tips Collection

部署ごとの売上順位など、エクセルで条件別の順位を出したいことが度々ある。通常RANK関数でランキングを出すが、複数条件を指定できるIF機能のついたRANKIF関数はエクセルには存在しない。しかし、別の関数をうまく活用することで、条件を指定をしたRANKIF関数のようなことは可能だ。その方法について解説する。

 

RANKIFは、COUNTIFを使えば代用できる

ランキングとは、そもそもその項目よりも大きい(もしくは小さい)項目がいくつあるか表示する機能と言ってもよい。
つまりCOUNTIFS関数を使えば、本来エクセルにないRANKIF関数のような操作は実施可能だ。

以下の通り関数を組めば、条件別のランキングが表示可能だ。
—————————————————————————————
【大きい順ランキング】
COUNTIFS(順位を出す数値の範囲 , “>”& 順位を出すセル , 条件範囲1 , 条件1 , ・・・)+1
【小さい順ランキング】
COUNTIFS(順位を出す数値の範囲 , “<“& 順位を出すセル , 条件範囲1 , 条件1 , ・・・)+1
—————————————————————————————

順位を出す数値の範囲:順位を出す数値と比較するセルの全体範囲(「売上」の列など)
順位を出すセル:順位の数を出したい数値(「100,000円」のセルなど)
条件範囲1:条件が記載されているセルの全体範囲(「地域」の列など)
条件1:順位を出したい条件(「北海道」のセルなど)

条件が複数あれば、条件範囲2, 条件2、のように追加していけばよい。
具体例を使って解説する。

 

COUNTIFを使った条件別ランキング表示を試してみる

下記のエクセルに沿って実際に試してみよう。

これは、とある会社の顧客別の売上リストとする。これから地域別のランキングを表示する。

この会社は、主に「東京」「神奈川」「埼玉」で活動しており、顧客ごとの地域はA列に記載されている。
D列は、全体のランキングだ。通常通り、RANK関数でこれは出せる。

E列に、地域別の売上の大きい順でのランキングを表示する。
先ほどの通り、その場合の関数は以下の通りだ。
COUNTIFS(順位を出す数値の範囲 , “>”& 順位を出す数値 , 条件範囲1 , 条件1 , ・・・)+1

これを今回のケースに当てはめると、以下のような入力となる。
COUNTIFS($C$2:$C$20 , “>”& C2 , $A$2:$A$20 , A2 )+1

順位を出す数値の数値の範囲は、売上の順位を出したいため、C列となる。
順位を出す数値は、C列の中の、順位を出す特定の企業の売上セルだ。
条件範囲1は、地域ごとの条件で順位を出したいため、A列となる。
条件1は、同様に、A列の中の、順位を出すと特定の企業の地域セルだ。

順位を出す数値の範囲と、条件範囲のセルに「$」を入れているのは、E列全体に関数をコピーした場合に、全体範囲がずれないためだ。
結果、以下の通りになる。

例えば、O社は全体では6位だが、埼玉内では1位だとわかる。

 

COUNTIFSでグループ別順位を計算する仕組み

COUNTIFS関数は、そもそも条件に合う項目がいくつあるかをカウントする関数だ。ここでは、条件の合うもので「対象のセルよりも大きい(もしくは少ない)セルの数」を出している。そのため、大きいか小さいかで”>”と”<“の記号だけ違う。
また、そのままでは、一位のセルが「0」と表示されてしまう。それよりも小さいセルが他に一つもないからだ。最後の「+1」はそのためにある。

 

ドンピシャな関数がなくても他の関数で代用

ありそうでないRANKIF関数も、その本質が、対象のセルよりも大きい(もしくは小さい)セルの数をカウントすることだとわかれば、COUNTIFSという別の関数で代用できる。
このような小技をいくつか知っていれば、エクセル作成のスピードもあがるだろう。