manase's blog

ビジネスのためのエクセル集計・分析など

Rank関数の応用例

数字の大小に応じて「順位」をつける関数がRank関数です。対象範囲の中に同数が入っているような場合に異なる計算方法をするために、Rank.AVE関数とRank.EQ関数を使い分けることができます。詳細はマイクロソフトの公式サイトで確認できます。ただし、集計対象が金額などのような場合、同数が存在するという可能性は低いのかもしれません。そのような時には、シンプルに =Rank(...) という関数を使えば大丈夫です。

 

集計や分析の中で、順位をもとに「並び替える」という行為が大きな役割を果たすことがよくあります。ただし、順位をもとに並び替えるだけなのであれば、備え付けの並び替え機能でことは足ります。では、どんな時にRank関数がその威力を発揮するのでしょうか。いくつかその応用例を紹介したいと思います。

 

例えば、今期の売上リストを表示する際に、前期の順位も表示する、ということが役立つかもしれません。または、過去〇期内での最高順位、のようなものはどうでしょうか。上位〇位に入った期の数、という情報も面白いかもしれません。音楽CDの売り上げランキングなんかでよく見る集計方法です。

これらの集計を行うには、Rank関数を使って、「順位を期ごとに並べた行列」を作っておけばよいのです。ピボットまたはSumifs関数でクロス集計したものを用意し、これをもとに別の場所にRank関数を用いて各期のランキング並べます。

 

期ごとの売り上げの集計Sumifs関数を使った集計

f:id:manaseee:20180523220242j:plain

 

期ごとの順位の行列:Rank関数を使って各期の順位を返す

f:id:manaseee:20180523220553j:plain

セル"B12"には以下の式を入力します。

=RANK(B2,B$2:B$8)

最初の引数(B2)が対象の数値で、2番目の引数で全体の範囲を指定します。

 

最終的なランキング表に検索関数(Vlookup関数またはIndex関数)で引っ張ってきたり、その他の関数(ランクの最小値を返す関数にはMIN関数、〇位以内に入った期を数えるにはCountifs関数)、という流れです。

 

ランキング表上記の順位の行列からの集計

f:id:manaseee:20180523223044j:plain

前述した順位行列は「作業シート」というシートにあるとします。上記の「2016年の順位」、「過去の最高順位」、「3位までに入った年の数」を求めるための数式は以下の通りです。

 

2016年の順位:=INDEX(作業シート!$E$12:$E$18,MATCH(B4,作業シート!$A$12:$A$18,0))

過去の最高順位:=MIN(INDEX(作業シート!$B$12:$E$18,MATCH($B4,作業シート!$A$12:$A$18,0),0))

3位までに入った年の数:=COUNTIFS(INDEX(作業シート!$B$12:$F$18,MATCH($B4,作業シート!$A$12:$A$18,0),0),"<=3")

 

MIN関数やCOUNTIFS関数を使うにあたり、集計範囲を変動にするために、INDEX関数で範囲を返す方法を使いました(よろしければINDEX関数に関する記事もご確認ください)。

 

同じような考え方ではありますが、ある二つ順位列を比較し、大きな違いがあるのかどうか探る、という分析も可能です。シンプルな方法としては、対象1と対象2(店舗や地域など)の順位の差の絶対値を計算し、順位に大きな差がある項目を探す、という方法です。絶対値の計算方法はABS関数です。

f:id:manaseee:20180524212014j:plain

使用している関数は以下のとおりです。

"D2": =RANK(B2,B$2:B$15)

"E2": =RANK(C2,C$2:C$15)

"F2": =ABS(D2-E2)

 

商品 "i" と "m" に大きな差(10と11)が見られますので、この違いを視覚的に見えるようにしてみます。

f:id:manaseee:20180524213534j:plain

表にしてみると意外とインパクトがあります。場合によっては、金額や数字をそのまま使うよりも、順位が大きく変動していることを示す方が、メッセージとしては伝わりやすいかもしれません。