跳到主要內容跳到頁尾

排名與百分位函式整理:RANK、LARGE、PERCENTILE、PERCENTRANK、QUARTILE

10 分鐘閱讀Lv.2 中級摘要與日期

RANK 系列、LARGE 與 SMALL、PERCENTILE 系列、PERCENTRANK 系列、QUARTILE 系列共 14 個函式的語法與範例,說明並列、INC 與 EXC 的差別,以及空白、文字與超出範圍時會怎樣。

發布 更新

文章目錄

月底要排名了:每家分店賣了幾杯,誰第幾名、第 3 名賣多少、「我這家贏過幾成的分店」。這幾個問題剛好對到一整族函式,RANK、LARGE、PERCENTILE、PERCENTRANK、QUARTILE,而且每個還有 .INC、.EXC 的版本,名字長得很像,一開始真的會搞混。

我自己平常最常用的是 RANK 跟 LARGE,PERCENTILE 偶爾,QUARTILE.EXC 這種在工作上幾乎沒碰過。這篇當工具書,需要哪個就跳到哪個的標題查。


這篇用的資料

10 家分店某個月賣出的杯數,放在 A1:B11,其中有兩組同分(967 杯、1103 杯),後面講並列時會用到:

分店月銷量
台北信義1284
台北大安967
新北板橋1103
桃園中壢967
台中西屯1342
台中北屯856
台南東區1019
高雄左營1176
高雄三民743
新竹竹北1103

由小到大排好是 743、856、967、967、1019、1103、1103、1176、1284、1342,一共 10 筆。下面的範例都以 B2:B11 當資料範圍。


排名

這一族是「給一個值,告訴我它排第幾」。

如果規則是先比金牌,再比銀牌、銅牌,就要同時比較多欄。逐欄計算「有幾隊在前面」、同牌並列後跳號的做法,見 獎牌榜排序與排名。

五個分數 95、90、90、80、70,RANK 給兩個 90 都是第 2 名、80 是第 4 名,RANK.AVG 給兩個 90 都是 2.5,LARGE 的第 2 與第 3 個都是 90← 左右滑動看完整的圖,點圖可放大

圖:同分的時候,RANK 並列、下一名跳號,RANK.AVG 取平均。

RANK

傳回某個值在資料中的排名。

語法:

  • 值:要查排名的數字。
  • 資料:整份要比較的範圍。
  • 是否遞增:選填。省略或填 FALSE 是由大到小(最大的是第 1 名),填 TRUE 是由小到大。

舉例來說,要算「新北板橋」(B4,1103 杯)排第幾:

Google 試算表公式
fx

B4 在 B2:B11 由大到小排第幾

=RANK(B4, $B$2:$B$11)

比 1103 大的有 1342、1284、1176 三個,所以是第 4 名,你應該會得到 4!

要往下複製給每一家分店的話,資料範圍要加 $ 鎖住($B$2:$B$11),不然複製到下一列,範圍會跟著往下滑,第一筆資料就掉出去了。

把第 3 個參數改成 TRUE,就變成「由小到大」:

Google 試算表公式
fx

B4 由小到大排第幾,銷量越少越前面

=RANK(B4, $B$2:$B$11, TRUE)

由小到大,比 1103 小的有 743、856、967、967、1019 五個,所以是第 6 名。

並列的時候,RANK 會給同分的人一樣的名次,下一個名次跳過去。兩家 1103 杯都是第 4 名,下一家 1019 杯就直接是第 6 名,沒有第 5 名。全部 10 家的結果如下:

分店月銷量RANKRANK.AVG
台北信義128422
台北大安96777.5
新北板橋110344.5
桃園中壢96777.5
台中西屯134211
台中北屯85699
台南東區101966
高雄左營117633
高雄三民7431010
新竹竹北110344.5

「值」如果不在資料裡,例如 ,會是 #N/A。

RANK.EQ

跟 RANK 一樣,同分時給同分的人最前面的那個名次。

語法:

一樣是 4。這個名字的 EQ 是 equal(相等)的意思,指的是「相等的值拿同樣的名次」。

我個人幾乎都寫 RANK,因為兩個的結果沒有不同,少打三個字。如果同事習慣用有 .EQ 的寫法(Excel 的函式清單裡兩種都有),照他們的寫法也沒問題。

RANK.AVG

同分時,傳回這幾個名次的平均。

語法:

兩家 1103 杯本來佔第 4 和第 5 名,平均是 4.5:

Google 試算表公式
fx

同分的兩家 1103 杯,名次取 4 和 5 的平均

=RANK.AVG(B4, $B$2:$B$11)

結果是 4.5。兩家 967 杯佔第 7、第 8 名,每一家是 7.5。

名次要頒獎、公告的時候,我用 RANK,大家看得懂「並列第 4」。要拿名次再去做統計(例如算名次的平均),就用 RANK.AVG,因為每個名次加起來的總和不會被並列改掉。


第 N 大與第 N 小

這一族反過來,「告訴我第幾名的值是多少」。

LARGE

傳回資料中第 N 大的值。

語法:

  • 資料:要找的範圍。
  • N:第幾大,1 是最大。
Google 試算表公式
fx

B2:B11 的第 3 大

=LARGE(B2:B11, 3)

由大到小是 1342、1284、1176,所以第 3 大是 1176。

並列的時候,LARGE 看的是位置,同分的值會各佔一個名額。 跟 都是 1103,要到第 6 大才是 1019。

N 如果是 0,或大於資料的個數(這份資料是 10 個,寫 11),會是 #NUM!。

SMALL

傳回資料中第 N 小的值,語法跟 LARGE 一樣。

語法:

Google 試算表公式
fx

B2:B11 的第 2 小

=SMALL(B2:B11, 2)

由小到大是 743、856,第 2 小是 856。

LARGE(資料, 1) 等於 MAX,SMALL(資料, 1) 等於 MIN,這兩個我反而都直接寫 MAX、MIN。

順便找出是誰

LARGE 只給你數字,要知道是哪家分店,可以搭配 FILTER(用法在 FILTER 函數教學):

Google 試算表公式
fx

找出月銷量是第 4 大的分店名稱,同分的會全部列出

=FILTER(A2:A11, B2:B11 = LARGE(B2:B11, 4))

第 4 大是 1103,所以會溢出兩列:

列A
1新北板橋
2新竹竹北

用 XLOOKUP(見 XLOOKUP 函式入門)也可以查,不過它只會回傳第一個符合的,同分的第二家就看不到了。


百分位數

「百分位數」是反過來問:要落在整份資料的 40% 位置,那個值是多少。

INC 把最小值放在 0、最大值放在 1,EXC 把 10 筆資料全部放在 0 與 1 之間← 左右滑動看完整的圖,點圖可放大

圖:INC 與 EXC 差在「兩端要不要算進去」,後面三族函式都分這兩個版本。

.INC 是 inclusive(包含),最小值是 0、最大值是 1,10 筆資料平均分在中間,間距 1/9。.EXC 是 exclusive(排除),0 跟 1 都不算,10 筆資料落在中間,間距 1/11。資料只有 10 筆的時候,兩種算法差得很明顯。

PERCENTILE

傳回資料的第 k 個百分位數,k 介於 0 到 1。

語法:

  • 百分位數:0 到 1 的小數,0.4 就是 40%。

PERCENTILE 等同 PERCENTILE.INC。位置落在兩個資料中間時,會用內插法算出中間值。以 0.4 為例,位置是 0.4 × (10 − 1) = 3.6,也就是排好序後第 4 個(967)往第 5 個(1019)走 0.6:

Google 試算表公式
fx

資料的 40% 百分位數,位置 3.6 落在 967 與 1019 之間

=PERCENTILE(B2:B11, 0.4)

手算:967 + 0.6 × (1019 − 967) = 998.2,結果就是 998.2。

寫 0.5 的話,結果是 1061,剛好是 1019 與 1103 的平均,也就是中位數。

PERCENTILE.INC

跟 PERCENTILE 同一個東西,只是名字多了 .INC。

語法:

是 998.2, 是 1289.8。

.INC 的 k 可以是 0 跟 1,分別傳回最小值 743 跟最大值 1342。

PERCENTILE.EXC

排除 0 跟 1 的百分位數。

語法:

位置的算法變成 k × (n + 1),同樣 0.4,位置是 0.4 × 11 = 4.4,也就是第 4 個(967)往第 5 個(1019)走 0.4:

Google 試算表公式
fx

EXC 版本的 40% 百分位數

=PERCENTILE.EXC(B2:B11, 0.4)

手算:967 + 0.4 × 52 = 987.8,比 INC 的 998.2 小。

k 有範圍限制:要在 1/(n+1) 到 n/(n+1) 之間,10 筆資料就是約 0.0909 到 0.9091。所以 跟 都是 #NUM!。 還在範圍內,結果是 1336.2。

要選哪個?我會看使用的場合:學校成績、公司內部排名,我用 INC,因為最高分就是 100%,直覺。統計課本或要跟別人對數字的時候,要先確認對方用的是哪一種。


百分比排名

這一族是百分位數的反向:給一個值,告訴我它在整份資料的百分之幾。

PERCENTRANK

傳回某個值的百分比排名,0 到 1 之間。

語法:

  • 值:要查的數字。
  • 有效位數:選填,預設 3 位。

PERCENTRANK 等同 PERCENTRANK.INC,算法是「比它小的有幾個,除以(總數 − 1)」。台南東區 1019 杯,比它小的有 4 個(743、856、967、967):

Google 試算表公式
fx

1019 在 B2:B11 的百分比排名

=PERCENTRANK(B2:B11, 1019)

4 ÷ 9 = 0.4444…,預設只留 3 位有效數字,結果是 0.444。

如果「值」不在資料裡,但落在最小與最大之間,會用內插法。例如 1050 在 1019(4/9)與 1103(5/9)之間:

Google 試算表公式
fx

1050 不在資料內,落在 1019 與 1103 之間,用內插法

=PERCENTRANK(B2:B11, 1050)

手算:4/9 + (1050 − 1019) ÷ (1103 − 1019) × 1/9 ≈ 0.4854,顯示 0.485。

「值」比資料的最小值還小或比最大值還大,例如 ,會是 #N/A。

你可能會想:這跟 算「贏過幾成的人」一不一樣?不太一樣。後者分母是 10,1103 杯那家是 5 ÷ 10 = 0.5;PERCENTRANK 分母是 9,5 ÷ 9 = 0.555555…,省略精度引數時 PERCENTRANK 保留 3 位並四捨五入,結果是 0.556,不是 0.555。我個人要講「贏過幾成」的時候用 COUNTIF 那條,因為對老闆最好解釋。

精度由第三個引數決定:同一個 1103,省略精度與明填 3 都是 0.556,明填 6 則是 0.555556。這是函式依精度引數回傳的值,不是只把小數顯示位數調多;要跟 Excel 對數字時也要留意,Excel 的 PERCENTRANK 是直接截斷多餘位數(微軟官方範例把 6/9 寫成 0.666),同樣的 5/9 在 Excel 會是 0.555,Sheets 則是四捨五入的 0.556。

PERCENTRANK.INC

跟 PERCENTRANK 同一個東西。

語法:

是 0.444。最小值 743 是 0,最大值 1342 是 1。

PERCENTRANK.EXC

排除 0 跟 1 的版本,算法是「位置 ÷(總數 + 1)」。

語法:

1019 在排好序後是第 5 個,5 ÷ 11 = 0.454545…。我把有效位數改成 4:

Google 試算表公式
fx

EXC 版本,有效位數指定 4 位

=PERCENTRANK.EXC(B2:B11, 1019, 4)

結果是 0.4545。同樣的資料,INC 版本是 0.444,EXC 版本是 0.4545,這個差別跟上一節的百分位數是同一回事。

最小值 743 在 EXC 是 1/11 ≈ 0.091,不是 0。


四分位數

四分位數是把資料切成四等份的三個切點。0、1、2、3、4 分別是最小值、25%、50%(中位數)、75%、最大值。

QUARTILE

傳回資料的四分位數。

語法:

  • 四分位數:0 到 4 的整數,0 最小值、1 第一四分位、2 中位數、3 第三四分位、4 最大值。

QUARTILE 等同 QUARTILE.INC,也就是 PERCENTILE.INC 的 0.25、0.5、0.75。

Google 試算表公式
fx

第三四分位數,等於 PERCENTILE.INC 的 0.75

=QUARTILE(B2:B11, 3)

位置是 0.75 × 9 = 6.75,在第 7 個(1103)往第 8 個(1176)走 0.75:1103 + 0.75 × 73 = 1157.75。

第一四分位數 是 967,因為落在兩個 967 之間,內插結果還是 967。中位數 是 1061。

QUARTILE.INC

跟 QUARTILE 同一個東西。

語法:

是 1157.75, 是最大值 1342。

QUARTILE.EXC

排除 0 跟 4 的版本。

語法:

  • 四分位數:只能 1、2、3。
Google 試算表公式
fx

EXC 的第一四分位數,等於 PERCENTILE.EXC 的 0.25

=QUARTILE.EXC(B2:B11, 1)

位置是 0.25 × 11 = 2.75,在第 2 個(856)往第 3 個(967)走 0.75:856 + 0.75 × 111 = 939.25。第三四分位數 是 1203,中位數 一樣是 1061。

或 ,會是 #NUM!。


空白、文字與並列

這幾個函式遇到「不太乾淨」的資料,行為大致一致,整理如下:

  • 資料範圍裡的空白儲存格與文字,會被略過,不算進個數。B2:B11 如果多了一格空白、一格「缺」,LARGE(B2:B13, 1) 還是 1342,RANK 的名次也不變。
  • 「值」那個參數如果不在資料裡(RANK)或超出範圍(PERCENTRANK),會是 #N/A。
  • LARGE、SMALL 的 N 超過資料個數,會是 #NUM!。
  • .EXC 的百分位數與四分位數超出範圍,會是 #NUM!。
  • 並列:RANK、RANK.EQ 給同樣的名次並跳號,RANK.AVG 給平均,LARGE、SMALL 每個同分的值各佔一個名額。

最容易出錯的是資料中混了「看起來是數字的文字」。對齊方式可以手動改,不能單靠左右對齊判斷型態;排名前先用 ISNUMBER 檢查,確認文字是否需要轉成數值,再決定要不要略過。


要拿名次做獎金分級,可以接 IFS;算整體的分布(標準差、中位數)在 統計分析函式。

我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
#RANK#LARGE#PERCENTILE#PERCENTRANK#QUARTILE#排名#百分位
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

這篇在技能樹的 Lv.2「進階分析」,模組「計算排名與百分位數」(第 1/1 篇)。讀完這篇,路線上的下一個模組是「分析資料的分布」。

回到技能樹

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。