ExcelのPERCENTRANK.EXC関数とは?百分位ランクの「除く」型を求める関数
「テストの点数が、全体の中で上位何%に位置するか統計的に出したい」
「売上データの中で特定の値が、端を除いた方式で何パーセンタイルにあたるか知りたい」
こんな場面で「.INC」と「.EXC」のどちらを使うか迷ったことはありませんか。
この記事ではPERCENTRANK.EXC関数の使い方を、INC関数との数値比較を交えて解説します。kの計算方式やsignificance引数の使い方、よくあるエラーの対処法までしっかり押さえていきましょう。
読み方と語源(EXC=Exclusive=0%と100%を除く)
PERCENTRANK.EXC関数の読み方は「パーセントランク・エクスク」または「パーセントランク・エクスクルーシブ」です。EXCは「Exclusive(排他的)」の略で、0%と100%の端点を含まないという意味があります。
百分位ランクとは、データの中でその値が「下から何%の位置にあるか」を示す統計指標です。たとえばランク0.5なら「下から50%の位置」、ランク0.9なら「下から90%の位置」にあたります。
PERCENTRANK.EXC関数は、この百分位ランクを「端点を除外する」方式で計算する関数です。対応バージョンはExcel 2010以降で、Microsoft 365でも問題なく使えます。
「含む(INC)」と「除く(EXC)」の違いを先に把握する
PERCENTRANK関数には「.INC」と「.EXC」の2種類があります。違いをざっくりまとめると次のとおりです。
| 関数 | 意味 | 返すランクの範囲 |
|---|---|---|
| PERCENTRANK.INC | Inclusive(含む) | 0以上1以下 |
| PERCENTRANK.EXC | Exclusive(除く) | 0より大きく1より小さい |
INCは最小値で0、最大値で1を返してくれますが、EXCは両端を絶対に返しません。さらに同じ値を指定しても、計算式が違うため返されるランクが変わってきます。
「結局どっちを使えばいいの?」と思いますよね。基本的にはINC関数で十分ですが、統計の教科書や品質管理の現場で「端を除く方式」が指定されている場合はEXC関数の出番です。詳しい比較はPERCENTRANK.INC関数の記事も合わせて読んでみてください。
PERCENTRANK.EXC関数の書き方(構文と引数)
基本構文
まずは基本の書き方を確認しましょう。引数は3つで、最後のsignificanceだけ省略可能です。
=PERCENTRANK.EXC(array, x, [significance])
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| array | 必須 | 百分位ランクを求めるデータ範囲 |
| x | 必須 | ランクを求めたい値 |
| significance | 省略可 | 結果の有効桁数(省略時は3桁) |
arrayにはセル範囲(A2:A11など)を指定し、xにはランクを求めたい値を渡します。significanceは小数点以下の有効桁数で、省略すると3桁(小数点第3位まで)で返されます。
significance引数の使い方
significance引数は、結果の桁数を制御するためのオプションです。
=PERCENTRANK.EXC(A2:A11, 75) → 0.687(省略時は3桁)
=PERCENTRANK.EXC(A2:A11, 75, 4) → 0.6875(4桁指定)
=PERCENTRANK.EXC(A2:A11, 75, 5) → 0.68750(5桁指定)
ふだんの業務なら省略してOKです。論文や品質管理の報告書など、桁数を厳密に揃えたい場合だけ指定すれば大丈夫です。
なお、significanceに1未満の値(0.5など)を指定すると#NUM!エラーになります。整数で指定するのが安全ですよ。
PERCENTRANK.EXC関数の基本的な使い方
サンプルデータでランクを求める
実際にPERCENTRANK.EXC関数を使ってみましょう。セルA2:A6に5人分のテスト点数{60, 70, 80, 90, 100}が昇順で入っているとします。
90点が全体の中でどの位置にあるかを求める数式はこうです。
=PERCENTRANK.EXC(A2:A6, 90)
結果は0.666になります。「上から2番目の値なのに66.6%なの?」と思うかもしれませんが、これがEXC方式の特徴なんです。
PERCENTRANK.EXC関数の計算式は次のとおりです。
ランク = (値より小さいデータの個数 + 1) ÷ (n + 1)
= (3 + 1) ÷ (5 + 1)
= 4 ÷ 6
= 0.666...
90より小さい値は{60, 70, 80}の3個。ここに1を足して4、それをデータ件数+1の6で割って約0.666、というロジックです。
中央の値(80点)のランク
同じデータで80点のランクも見てみましょう。
=PERCENTRANK.EXC(A2:A6, 80)
結果は0.5です。計算過程はこう。
ランク = (2 + 1) ÷ (5 + 1)
= 3 ÷ 6
= 0.5
80より小さい値は{60, 70}の2個。ここに1を足して3、データ件数+1の6で割って0.5、つまり中央のランクが返ります。データの個数が奇数のときは、中央の値とPERCENTRANK.EXC関数の結果0.5が一致します。
データに存在しない値のランク(線形補間)
PERCENTRANK.EXC関数は、データ範囲に存在しない値でもランクを返してくれます。たとえば85点のランクを求めると次のようになります。
=PERCENTRANK.EXC(A2:A6, 85)
結果は0.583です。85は80(ランク0.5)と90(ランク0.666)の中間の値なので、線形補間で計算されます。
0.5 + 0.5 × (0.666 - 0.5) = 0.583
このようにPERCENTRANK.EXC関数は、xに指定した値がデータ範囲内に無くても、前後の値を使って補間しながらランクを返してくれます。
PERCENTRANK.EXCとPERCENTRANK.INCの違い【数値比較】
計算式の違い
PERCENTRANK.INC関数とPERCENTRANK.EXC関数は、ランクの計算式が違います。
| 関数 | ランクの計算式 |
|---|---|
| PERCENTRANK.INC | (値より小さいデータの個数) ÷ (n – 1) |
| PERCENTRANK.EXC | (値より小さいデータの個数 + 1) ÷ (n + 1) |
INCは「小さい個数 ÷ (n-1)」、EXCは「(小さい個数 + 1) ÷ (n+1)」。分子と分母が両方違うのがポイントです。同じデータでも結果が変わってくる原因はここにあります。
同じデータでの結果比較
データ{60, 70, 80, 90, 100}(n=5)でINCとEXCの結果を並べてみましょう。
| 値 | PERCENTRANK.EXC | PERCENTRANK.INC |
|---|---|---|
| 60(最小値) | 0.166 | 0(=0/4) |
| 70 | 0.333 | 0.25(=1/4) |
| 80(中央値) | 0.5 | 0.5(一致) |
| 90 | 0.666 | 0.75(=3/4) |
| 100(最大値) | 0.833 | 1(=4/4) |
中央値(0.5)以外は結構違いますよね。EXCは端を除く方式なので、最小値でも0にならず、最大値でも1にならない点が大きな特徴です。
端点でのランクの違い
INCとEXCの最大の違いは、端点(最小値・最大値)でのランクです。
INC: 最小値 → 0、最大値 → 1
EXC: 最小値 → 1/(n+1)、最大値 → n/(n+1)
INCは「データ全体の0%〜100%」のレンジで返しますが、EXCは「0%と100%は理論上ありえない」という前提なので、両端のランクが内側に寄ります。
「順位を直感的に表したい」ならINC関数、「統計的に端を除く方式に従いたい」ならEXC関数、と覚えておけばOKです。仕事の現場ではINCの方が直感的で使い勝手がいいですよ。
PERCENTILE.EXCとの関係
PERCENTILE.EXC関数とPERCENTRANK.EXC関数は、ちょうど逆の関係にあります。
| 関数 | 入力 | 出力 |
|---|---|---|
| PERCENTILE.EXC | パーセンタイル(k) | データの値 |
| PERCENTRANK.EXC | データの値(x) | パーセンタイル |
たとえばPERCENTILE.EXC(範囲, 0.5)が80を返すなら、PERCENTRANK.EXC(範囲, 80)は0.5を返す、という対応関係になります。
データ分析の現場では、「80パーセンタイルの値はいくつか?」を知りたいときはPERCENTILE.EXCを、「この値は何パーセンタイルか?」を知りたいときはPERCENTRANK.EXCを使う、と使い分けます。
よくあるエラーと対処法
#N/Aエラー:xがデータ範囲外
PERCENTRANK.EXC関数で一番よく見るエラーが#N/Aエラーです。原因はxの値がarrayの最小値より小さいか、最大値より大きい場合です。
データ: A2:A6 = {60, 70, 80, 90, 100}
=PERCENTRANK.EXC(A2:A6, 50) → #N/Aエラー(最小値60より小さい)
=PERCENTRANK.EXC(A2:A6, 110) → #N/Aエラー(最大値100より大きい)
=PERCENTRANK.EXC(A2:A6, 75) → OK(範囲内なので補間で計算)
PERCENTRANK.EXC関数は、データ範囲の中だけで補間する関数です。範囲外の値には対応していないので、xを指定するときはmin・max範囲内に収まっているか確認しましょう。
#NUM!エラー:arrayが空またはデータ不足
arrayが空の場合や、データが少なすぎると#NUM!エラーになります。
=PERCENTRANK.EXC(A2:A2, 80) → #NUM!エラー(データが1件のみ)
=PERCENTRANK.EXC(A2:A6, 75, 0) → #NUM!エラー(significance < 1)
データが2件以上あるか、significance引数が省略時または1以上の整数になっているかを確認してみてください。
#VALUE!エラー:xが数値でない
引数xに数値以外の値が入っていると#VALUE!エラーになります。
たとえばxに「75点」と入力したセルを参照したつもりが、実は文字列として保存されていた、というケースがありがちです。xには必ず75のような純粋な数値を指定してください。
エラーを事前に防ぎたい場合はIFERROR関数で囲む方法もあります。
=IFERROR(PERCENTRANK.EXC(A2:A11, B1), "値がデータ範囲外、または無効です")
この書き方なら、エラー発生時にメッセージを表示できるので、データ入力者にも親切ですね。
まとめ
PERCENTRANK.EXC関数は「端点を除く方式」で値の百分位ランクを求める関数です。
ポイントを整理しておきましょう。
- 構文は
=PERCENTRANK.EXC(array, x, [significance])で、最小値でも0より大きいランクが返る - EXCは「Exclusive」の略で、最小値→1/(n+1)、最大値→n/(n+1) のランクになる
- 計算式は (値より小さい個数 + 1) ÷ (n + 1) で、INCとは結果が異なることが多い
- significance引数を省略すると3桁、指定すれば桁数を制御できる
- 範囲外の値を指定すると#N/Aエラーになるので注意
- 迷ったときはPERCENTRANK.INC関数を使う方が直感的
品質管理データや統計分析で「端を除く方式」が必要な場面では、PERCENTRANK.EXC関数がしっかり活躍してくれます。INC関数との違いを理解した上で、用途に合わせて使い分けてくださいね。
