目次
このチュートリアルでは、ExcelのRank関数の特殊性を説明し、Excelで複数の基準に基づいてランキングを行う方法、グループごとにデータをランク付けする方法、パーセンタイルランクを計算する方法などを紹介しています。
数値のリストの中で、ある数値の相対的な位置を決定する必要がある場合、最も簡単な方法は、昇順または降順で数値を並べ替えることです。 何らかの理由で並べ替えができない場合、Excelのランク式がその作業を行うための完璧なツールになります。
エクセルRANK関数
ExcelのRANK関数は、同じリスト内の他の値と比較して、数値の順序(順位)を返します。 つまり、どの値が最も高く、2番目に高いか、などを知ることができます。
ExcelのRANK関数は、降順で並べた場合は大きい値から、昇順で並べた場合は小さい値から順位を決定することができます。
ExcelのRANK関数の構文は次のとおりです。
RANK(数値,ref,[順序])どこで
番号 (必須) - 検索したいランクの値です。
レフ (必須) - 順位をつけるための数値のリスト。 数値の配列として、あるいは数値のリストへの参照として提供することができます。
ご注文 (オプション) - 値をランク付けする方法を指定する数値です。
- 0 または省略した場合、値の大きいものから小さいものへと降順に並べられる。
- 1またはその他の0以外の値の場合、値は昇順に、すなわち小さいものから大きいものへと順位付けされる。
エクセル RANK.EQ関数
RANK.EQは、Excel 2010で導入されたRANK関数の改良版です。 RANKと同じ構文で、同じ論理で動作します。 複数の値が同じ順位であれば、すべての値に最高順位が割り当てられます(EQは「等しい」の意味です)。
RANK.EQ(数値,ref,[順序])Excel 2007以下のバージョンでは、常にRANK関数を使用する必要があります。 Excel 2010、Excel 2013、Excel 2016では、RANKとRANK.EQのどちらでも構いません。 しかし、RANKはいつ廃止されるか分からないので、RANK.EQを使うのが賢明でしょう。
Excel RANK.AVG関数
RANK.AVGは、Excel2010、Excel2013、Excel2016以降でのみ利用できる、Excelのランクを求めるもう一つの関数です。
他の2つの関数と同じ構文です。
RANK.AVG(数値,ref,[順序])違いは、同じランクの数字が複数ある場合は 平均ランク が返されます(AVGは "平均 "を意味します)。
ExcelのRANKについて知っておくべき4つのこと
- Excelのランク式は、正負の数値、ゼロ、日付、時刻などの数値に対してのみ機能します。 レフ 引数は無視されます。
- すべてのRANK関数は、以下の例に示すように、重複する値に対して同じ順位を返し、それ以降の順位はスキップされます。
- Excel 2010以降のバージョンでは、RANK関数がRANK.EQおよびRANK.AVGに置き換えられました。 後方互換性のため、RANKはすべてのバージョンのExcelで引き続き使用できますが、将来的に使用できない可能性があります。
- もし 番号 の中にない。 レフ というエラーが出て、ExcelのRank関数はどれも#N/Aエラーを返します。
Excelの基本的なランク式(高いものから低いものへ)
Excelでのランキングデータについて、より理解を深めていただくために、こちらのスクリーンショットをご覧ください。
3つの計算式とも、B列の数値の順位が 降順 (その 言いつけ 論は省略)。
Excel 2003 - 2016のすべてのバージョンで。
=rank($b2,$b$2:$b$7)です。
Excel 2010 - 2016の場合。
=rank.eq($b2,$b$2:$b$7)である。
=rank.avg($b2,$b$2:$b$7)とする。
このように、セルB5とセルB6に同じスコアが2回表示され、その後のランキングに影響を及ぼしています。
- RANKとRANK.EQの計算式では、重複したスコアに2が与えられ、次に高いスコア(Daniela)は4位にランクされています。 3は誰にも与えられません。
- RANK.AVG式は、裏側で各複製に異なるランク(この例では2と3)を割り当て、それらのランクの平均値(2.5)を返します。 ここでも、3番目のランクは誰にも割り当てられていません。
ExcelでRANKを使う方法 - 計算式の例
ExcelのRANK関数を単独で、あるいは他の関数と組み合わせて使用する方法を学ぶために、実際にいくつかの課題を解決してみましょう。
Excelで順位をつける方法(下位から上位まで
上の例で示したように、数字を高いものから低いものへとランク付けするには、Excel のランク計算式の1つを使用します。 言いつけ 引数を 0 に設定するか、省略する(デフォルト)。
持つこと 番号 で並べられた他の数字と比較して順位付けされています。 しょうじゅんれい の場合、オプションの第3引数に1またはその他の非ゼロの値を入れる。
例えば、生徒の100m走のタイムに順位をつけるには、以下のどちらかの計算式が使えます。
=rank(b2,$b$2:$b$7,1)です。
=rank.eq(b2,$b$2:$b$7,1)である。
でレンジをロックしていますので、ご注意ください。 レフ の引数を絶対セル参照にすることで、数式を列の下にコピーしても変更されないようにしています。
その結果、最も小さい値(最速タイム)が1位、最も大きい値(最遅タイム)が最低ランクの6位となり、同タイム(B2、B7)には同じランクが与えられました。
Excelでデータを一意にランク付けする方法
先に述べたように、Excelのランク関数はすべて、同じ価値の項目に対して同じランクを返します。 それが嫌な場合は、以下の計算式のいずれかを使って、タイブレークの状況を解決し、ランクを与えてください。 ゆういぎ を各数値に変換します。
ユニークなランキングを高いものから順に
生徒の数学の点数を降順で一意に順位付けするには、次の式を使用します。
=rank.eq(b2,$b$2:$b$7)+countif($b$2:b2,b2)-1
ユニークなランキング(下位から上位まで
100メートル走の結果を、重複のない昇順に並べるには、次の計算式を使用します。
=rank.eq(b2,$b$2:$b$7,1) + countif($b$2:b2,b2)-1
これらの計算式の仕組み
お気づきのように、2つの計算式の唯一の違いは 言いつけ RANK.EQ関数の引数:省略すると値の降順、1だと昇順になります。
どちらの式でも、COUNTIF関数とセルの相対参照、絶対参照をうまく使っています。 要するに、COUNTIFを使って、順位付けされる数字が、その数字のセルを含む上のセルにいくつあるか調べるのです。 この式を入力した一番上の行では、範囲は1つのセル($B$2:B2)です。 しかし、この式では最初の参照($B$2)、最後の相対参照(B2)は、数式がコピーされた行によって変化します。 したがって、7行目の場合、範囲は$B$2:B7に拡大し、B7の値が上記の各セルと比較されます。
従って、1回目の計算では、COUNTIFは1を返し、計算式の最後で1を引いて元の順位に戻します。
2回目の出現の場合、COUNTIFは2を返します。 1を引くことで順位を1ポイント上げ、重複を防ぎます。 もし同じ値が3回出現した場合、COUNTIF()-1により順位を2追加し、以下同様とします。
ExcelのRANKタイを解消する代替ソリューション
Excelで数値を一意に順位付けするもう一つの方法は、2つのCOUNTIF関数を足し合わせることです。
- 最初の関数は、降順か昇順かによって、それぞれ順位付けする数値より大きい値、小さい値を決定する。
- 2番目の関数(上の例のように「拡大範囲」$B$2:B2)では、数値に等しい数を取得します。
例えば、数字を高いものから低いものへと一意に並べるには、次のような式を用います。
=COUNTIF($B$2:$B$7,">"&$B2)+COUNTIF($B$2:B2,B2)です。
以下の画面のように、タイブレークが正常に解決され、各生徒に固有の順位が割り当てられます。
複数条件に基づくExcelでのランキング
前の例では、Excel RANKのタイブレーク状況に対する2つの有効な解決策を示しました。 しかし、リスト内の位置だけに基づいて同数の順位が異なるのは不公平に思えるかもしれません。 ランキングを改善するには、タイの場合に考慮する基準をもう1つ追加するとよいでしょう。
今回のサンプルデータセットでは、C列の総得点を加算して、以下のように順位を計算してみよう。
- まず、ランク付けを 数学スコア (主要条件)
- 同点の場合は、次のようにブレークします。 合計スコア (二次基準)
それを行ってもらうために、通常のRANK/RANK.EQ式で順位を求め、COUNTIFS関数で同点解消を行います。
=RANK.EQ($B2,$B$2:$B$7)+COUNTIFS($B$2:$B$7,$B2,$C$2:$C$7,">"&$C2.)
上の例と比較すると、この順位式はより客観的で、TimothyはJuliaより総得点が高いので2位となる。
この式の仕組み
RANKの部分は当然として、COUNTIFS関数は次のような働きをします。
- 第1回 クライテリア・レンジ / クライテリア ペア ($B$2:$B$7,$B2) は、ランキングしている値の出現回数を数えます。 なお、ここでは レンジ を絶対参照でロックしない。 クライテリア の行 ($B2) の値をチェックするように、数式は各行の値を個別にチェックします。
- 第2回 クライテリア・レンジ / クライテリア pair ($C$2:$C$7,">"&$C2) は、順位付けされている値の総スコアより大きい総スコアがいくつあるか調べます。
COUNTIFSはAND論理で動作するため、つまり、指定された条件のすべてを満たすセルのみをカウントするため、Timothyの場合、同じ数学のスコアを持つ他の生徒の合計スコアが高くないので0を返します。 したがって、TimothyのRANK.EQによる順位は変わりません。 Juliaの場合はCOUNTIFS関数が1を返し、同じ数学スコアを持つ1人の生徒が合計スコアを高くしたので彼女の順位数は次のとおりです。もし、もう一人の生徒が同じ数学のスコアを持っていて、ティモシーとジュリアのスコアより低い合計スコアを持っていたら、その生徒の順位は2つ上がり、以下同様となります。
複数の基準で数値をランク付けするための代替案
RANKまたはRANK.EQ関数の代わりに、COUNTIFを使って主な条件をチェックし、COUNTIFSまたはSUMPRODUCTを使ってタイブレークを解決することができます。
=COUNTIF($B$2:$B$7,">"&$B2)+COUNTIFS($B$2:$B$7,$B2,$C$2:$C$7,">"&$C2)+1
=COUNTIF($B$2:$B$7,">"&B2)+SUMPRODUCT(--($C$2:$C$7=C2),--($B$2:$B$7> B2))+1(以下同じ
これらの式の結果は、上に示したものと全く同じである。
Excelでパーセンタイルランクを計算する方法
統計学では パーセンタイル 又は センチレター 例えば、70%の生徒があなたのテストスコアと同じかそれ以下であれば、あなたのパーセンタイルランクは70です。
Excelでパーセンタイルランクを求めるには、RANK関数またはRANK.EQ関数に0以外の値を指定して使用します。 言いつけ 引数で小さいものから大きいものへと順位を付け、その順位を数字の数で割る。 つまり、一般的な エクセルパーセンタイルランクの計算式 は次のようになる。
RANK.EQ( 最上位のセル , レンジ 1)/COUNT()です。 レンジ )私たちの学生のパーセンタイルランクを計算するために、計算式は次のような形になります。
=rank.eq(b2,$b$2:$b$7,1)/count($b$2:$b$7)
結果を正しく表示させるために、必ず 比率 の書式を数式セルに設定します。
隣接しないセル内の数値の順位付けを行う方法
連続しないセルをランク付けする必要がある場合、そのセルを直接 レフ の引数を参照結合の形でExcel Rankの数式に追加し、$記号で参照をロックします。 たとえば、次のようになります。
=rank(b2,($b$2,$b$4,$b$6))
ランク付けされていないセルでエラーが発生しないようにするには、次のようにRANKをIFERROR関数でくくる。
=iferror(rank(b2,($b$2,$b$4,$b$6)), "")
セルB5は数式に含まれていませんが、重複する番号にもランクが与えられていることに注意してください。
連続しない複数のセルをランク付けする必要がある場合、上記の数式は長くなりすぎることがあります。 この場合、名前付きの範囲を定義し、その名前を数式内で参照することで、よりエレガントな解決策を得ることができます。
=IFERROR(RANK(B2,range), "")
エクセルでグループごとに順位をつける方法
ある種のデータ構造に整理された項目を扱う場合、データが様々なグループに属することがあり、各グループ内の数値を個別にランク付けしたい場合があります。 ExcelのRANK関数ではこの課題を解決できないため、より複雑なSUMPRODUCT式を使用することになります。
でのグループ別順位 下行 の注文を受け付けています。
=SUMPRODUCT((A2=$A$2:$A$7)*(C2<$C$2:$C$7))+1
でのグループ別順位 上昇 の注文を受け付けています。
=SUMPRODUCT((A2=$A$2:$A$7)*(C2>$C$2:$C$7))+1
どこで
- A2:A7は番号に割り当てられたグループです。
- C2:C7は順位付けする数字です。
この例では、最初の式を使って、各グループの数字を大きいものから小さいものへと順位付けしています。
この式の仕組み
基本的に、この式は2つの条件を評価する。
- まず、グループ(A2=$A$2:$A$7)を調べます。 この部分は、範囲要素がA2と同じグループに属しているかどうかで、TRUEとFALSEの配列を返します。
- 次に、スコアを確認します。 値を大きいものから小さいものへとランク付けするため( 降順 ) の場合、条件 (C2<$C$2:$C$11) を使用し、C2 以上のセルには TRUE を、それ以外には FALSE を返します。
Microsoft Excelの用語では、TRUE=1、FALSE=0なので、2つの配列を掛け合わせると、1と0の配列になり、両方の条件を満たす行にのみ、1が返されます。
そして、SUMPRODUCTは1と0の配列の要素を足し算するので、各グループの最大の数には0を返します。 そして、その結果に1を足して1から順位をつけます。
グループ内の数字を小さいものから大きいものへと順位付けする式( 上昇 言いつけ は同じロジックで動作します。 違いは、SUMPRODUCTは特定のグループの最小の数に対して、そのグループの数が第2条件(C2>$C$2:$C$7)を満たさないので0を返すことです。 ここでも、式の結果に1を加えて、ゼロランクを第1ランクと置き換えています。
SUMPRODUCTの代わりに、SUM関数を使って配列の要素を合計することができます。 ただし、この場合、Ctrl + Shift + Enterで完了する配列式を使用する必要があります。 たとえば、次のようになります。
=SUM((A2=$A$2:$A$7)*(C2<$C$2:$C$7))+1
正の数と負の数を別々にランク付けする方法
数字のリストにプラスとマイナスの両方が含まれている場合、ExcelのRANK関数はすぐにすべての数字をランク付けします。 しかし、プラスとマイナスの数字を別々にランク付けしたい場合はどうすればよいでしょうか。
セルA2~A10にある数値について、以下のいずれかの計算式で、正の値、負の値の個別の順位を求めます。
正の数を降順に並べる。
=IF($A2>0,COUNTIF($A$2:$A$10,">"&A2)+1,"")
正の数の昇順でランク付けする。
=IF($A2>0,COUNTIF($A$2:$A$10,">0")-COUNTIF($A$2:$A$10,">"&$A2),".")
負の数を降順に並べる。
=IF($A2<0,COUNTIF($A$2:$A$10,"<0")-COUNTIF($A$2:$A$10,"<"&$A2),"")
負の数の昇順にランク付けする。
=IF($A2<0,COUNTIF($A$2:$A$10,"<"&$A2)+1,"")
結果はこのような感じになります。
これらの計算式の仕組み
そもそも、正の数をランク付けする公式を分解してみると 下行 の注文を受け付けています。
- IF関数の論理テストでは、数値が0より大きいかどうかをチェックします。
- 数値が0より大きい場合、COUNTIF関数は、順位付けされている数値より大きい数値のカウントを返します。
この例では、A2には2番目に大きい正の数が含まれており、COUNTIFは1を返すので、これより大きい数は1つしかないことになります。 ランキングを0ではなく1から始めるために、式の結果に1を加え、A2のランクを2にします。
- 数値が0より大きい場合、数式は空文字列("")を返します。
で正の数をランク付けする式。 上昇 オーダーは少し違います。
0より大きい場合、最初のCOUNTIFはデータセット内の正の数の合計を取得し、2番目のCOUNTIFはその数より大きい値の数を求めます。 そして前者から後者を引いて、目的のランクを得ます。 この例では、正の値が5つあり、そのうち1つはA2より大きいので5から1を引き、A2のランクは4ということになります。
負の数をランク付けする公式も、同様の論理に基づいている。
注)上記の式はすべて ゼロ値を無視する 0は正の数にも負の数にも属さないので、ランキングに0を含めるには、式の論理が要求する箇所で、それぞれ>0 と =0 と <=0 に置き換えてください。
例えば、正の数とゼロを大きいものから順に並べるには、次の式を用います。 =IF($A2>=0,COUNTIF($A$2:$A$10,">"&A2)+1,"")
エクセルでゼロ値を無視してデータをランク付けする方法
すでにご存知のように、RANK式は、Excelはすべての数字を処理します:正、負、ゼロ。 しかし、いくつかのケースでは、我々はちょうど0値を無視してデータを持つセルをランク付けしたい。 Web上で、あなたはこのタスクのためのいくつかの可能なソリューションを見つけることができますが、Excel RANK IF式は、メタン、最も普遍的な1であることを確認。
ゼロを無視した降順で数値を並べる。
=IF($B2=0,"",IF($B2>0,RANK($B2,$B$2:$B$10), RANK($B2,$B$2:$B$10)-COUNTIF($B$2:$B$10,0)))
ゼロを無視して昇順に番号をつける。
=IF($B2=0,",IF($B2>0,RANK($B2,$B$2:$B$10,1) - COUNTIF($B$2:$B$10,0)), RANK($B2,$B$2:$B$10,1)))
ここで、B2:B10は順位付けする数値の範囲である。
この式の最大の特徴は、正の数でも負の数でも美しく動作し、ゼロの値はランキングから除外されることである。
この式の仕組み
一見すると、少し難しい計算式に見えますが、よく見てみると非常にシンプルなロジックになっています。
ここでは、ExcelのRANK IF式で、ゼロを無視して大きいものから小さいものへと数値をランク付けする方法を説明します。
- 最初のIFは、数値が0であるかどうかをチェックし、0であれば空の文字列を返します。
if($b2=0,"", ...)
- 数値が0でなければ、2番目のIFで0より大きいかどうかをチェックし、0であれば通常のRANK / RANK.EQ関数で順位を計算します。
IF($B2>0,RANK($B2,$B$2:$B$10),...)
- 0より小さい場合は、ゼロの数で順位を調整します。 この例では、正の数が4つ、ゼロが2つあります。 したがって、B10の最大の負の数に対して、ExcelのRANK式は7を返します。 しかし、ゼロを飛ばしているので、2ポイントの順位調整が必要です。 そのためには、順位からゼロの数を引き算します。
rank($b2,$b$2:$b$10)-countif($b$2:$b$10,0))である。
そう、簡単なんです!ゼロを無視して小さい数字から大きい数字へとランク付けする公式も同じように機能するので、その論理を推理するのは良い頭の体操になるかもしれませんね(笑)
Excelで順位を絶対値で計算する方法
正負の値のリストを扱う場合、符号を無視した絶対値で数値をランク付けする必要がある場合があります。
この課題は、以下の公式のいずれかを用いて達成することができる。その中心となるのが、数値の絶対値を返すABS関数である。
ランク ABS 降順。
=SUMPRODUCT((ABS(A2)<=ABS(A$2:A$7)) * (A$2:A$7"")) - SUMPRODUCT((ABS(A2)=ABS($A$2:$A$7)) * (A$2:A$7"")))+1
ABSのランクを昇順にする。
=SUMPRODUCT((ABS(A2)>=ABS(A$2:A$7)) * (A$2:A$7"")) - SUMPRODUCT((ABS(A2)=ABS($A$2:$A$7)) * (A$2:A$7"")))+1
その結果、負の数が正の数であるかのようにランク付けされる。
N個の最大値、最小値の求め方
最大値または最小値の順位ではなく、実際のN個数を取得したい場合は、それぞれLARGE関数またはSMALL関数を使用します。
例えば、このような計算式で生徒の上位3人のスコアを求めることができます。
=large($b$2:$b$7,$d3)です。
ここで、B2:B7はスコアのリスト、D3は希望する順位である。
さらに、INDEX MATCH式で生徒の名前を取得することができます(上位3つのスコアに重複がないことが条件)。
=index($a$2:$a$7,match(e3,$b$2:$b$7,0))です。
同様に、SMALL関数を使って、下の3つの値を引き出すことができます。
=small($b$2:$b$7,$d3)です。
このチュートリアルで説明した数式をよりよく理解し、リバースエンジニアリングするために、サンプルランクエクセルワークブックをダウンロードしてください。
読んでくださってありがとうございました!来週も当ブログをよろしくお願いします。