1.什么是排名?
排名不等同于排序(雖然通過排序可以得出排名),排名指的是按照一定的方式確定一組數(shù)據(jù)的名次,比如將成績進行排名,得出的結(jié)果是第1名、第二名……
排名和排序的概念,很多人分不清楚,容易導(dǎo)致不在一個頻道上,所以希望大家首先搞明白兩者的區(qū)別。
2.如何進行排名?
普通排名
1.1 通過排序進行排名
這個很好理解,想要獲得一組數(shù)據(jù)的排名,可以首先將數(shù)據(jù)進行排序,然后標上序號即可。
這種排名屬于比較低級的方法,有兩個問題它無法跨越:
①如果數(shù)據(jù)有重復(fù),無法識別重復(fù)
②如果數(shù)據(jù)有更新,無法動態(tài)排名
因此有一個高級的玩法——使用Rank函數(shù)進行排名。
1.2 通過Rank函數(shù)排名
rank函數(shù)是排名函數(shù),最常用的是求某一個數(shù)值在某一區(qū)域內(nèi)的排名。
rank函數(shù)語法形式:rank(number,ref,[order])
number :需要求排名的那個數(shù)值;
ref :排名的參照數(shù)值區(qū)域;
order:為0或1,0的情況默認不用輸入,得到的就是從大到小的排名,對應(yīng)的輸入1是逆序排名。
同樣是上面的案例,我們來使用Rank函數(shù)來進行排名。
讓我們定格最終的排名效果,發(fā)現(xiàn)有兩個第五名,但是沒有第六名。
這是因為排名的數(shù)據(jù)中,有兩個數(shù)據(jù)重復(fù)了,在Rank的世界里,重復(fù)的排名也會占用一個名次,因此沒有第六名了,直接就調(diào)到了第七名,這就是普通是排名。
中國式排名
如下圖的樣子這就是中國式排名:并列第五,然后會出現(xiàn)第六名。
這種情況,使用用rank函數(shù)就無法實現(xiàn),需要用到COUNTIF和SUMPRODUCT函數(shù)嵌套。
在C2單元格輸入函數(shù),=SUMPRODUCT((B2<=B$2:B$9)/COUNTIF(B$2:B$9,B$2:B$9)),然后用力將行數(shù)向下復(fù)制。
一大坨函數(shù),肯定看不懂是什么鬼東西吧!
函數(shù)作用分析:
=SUMPRODUCT((B2<=B$2:B$9)/COUNTIF(B$2:B$9,B$2:B$9))
這個公式是兩個常用函數(shù)的嵌套。
1. 函數(shù)關(guān)鍵部分是 COUNTIF(B$2:B$9,B$2:B$9)
COUNTIF函數(shù)的語法規(guī)則如下:
countif(range,criteria)
參數(shù):range 要計算其中非空單元格數(shù)目的區(qū)域
參數(shù):criteria 以數(shù)字、表達式或文本形式定義的條件
說白了就是條件計數(shù),在區(qū)域rang中求滿足Criteria條件的單元格的個數(shù)。
大家常用的情況,比較簡單,一般是這樣的:
上述例子,在D2單元格寫入公式=COUNTIF(B2:B9,B2)
意思就是說,求在B2:B9這個區(qū)域中,等于B2單元格數(shù)值的單元格個數(shù)是幾?
顯然,在這個區(qū)域中,等于88的單元格只有B2自身,因此結(jié)果為1.
而如果Criteria參數(shù)是一個數(shù)組區(qū)域,那么將返回一個數(shù)組結(jié)果。
即:COUNTIF(B$2:B$9,B$2:B$9)的含義,(下面是重點)
就是分別以第2參數(shù)B$2:B$9區(qū)域中的8個單元格為條件,每次查找第1參數(shù)B$2:B$9區(qū)域中=B$2 或B$3 或B$4…… 或B$9的元素數(shù)……
返回一個數(shù)組結(jié)果是:{1,1,1,1,2,1,1,2}
即,區(qū)域中每個元素的重復(fù)次數(shù)
↑請把這句話讀三遍↑
2,解讀1/COUNTIF(B$2:B$9,B$2:B$9)
將函數(shù)求得的數(shù)組結(jié)果,作為分母,被1除,會出現(xiàn)什么結(jié)果呢?
例如:COUNTIF(B$2:B$9,B$2:B$9)= {1,1,1,1,2,1,1,2}時,
1/COUNTIF(C$3:C$9,C$3:C$9) 計算就是 = {1,1,1,1,0.5,1,1,0.5}
這一步是小學(xué)數(shù)學(xué)水平,應(yīng)該不難。
3,SUMPRODUCT函數(shù)
這個函數(shù)被譽為計算全能王,有限的篇幅里,我只能講最核心的知識。
直接上結(jié)論,大家記住結(jié)論即可,以后有機會詳細講解。
SUMPRODUCT函數(shù)的萬能公式為:
=SUMPRODUCT((條件1)*(條件2)*……*求和區(qū)域)
可以實現(xiàn)單一條件求和、多條件求和。
因此,在這個案例中,SUMPRODUCT函數(shù)括號內(nèi)的這一坨,最終實現(xiàn)的功能就是按照某一個條件求和。
①先來說求和
將1/COUNTIF(C$3:C$9,C$3:C$9) 得出的結(jié)果 {1,1,1,1,0.5,1,1,0.5}進行求和,你就會驚奇地發(fā)現(xiàn):
總和=【區(qū)域中不重復(fù)元素的個數(shù)!】
其實原理很簡單:比如案例中89重復(fù)了兩次,那么得出的數(shù)組中,兩個89分別對應(yīng)的位置都是0.5,兩個0.5相加等于1,相當于只被計算了一次。
以此推廣,如果某個數(shù)據(jù)重復(fù)了N次,那么它對應(yīng)的COUNTIF()結(jié)果=n,而其1/COUNTIF()結(jié)果=1/n,因為一共有n個元素(因為重復(fù)了N次),因此它們的個數(shù)總和=n*(1/n)=1
…………
所以,=SUMPRODUCT((1/COUNTIF(B$2:B$9,B$2:B$9))啰嗦了這么久,其實就是計算B$2:B$9區(qū)域中不重復(fù)元素的個數(shù)。
這一步相當于中學(xué)數(shù)學(xué)知識,對大家來說也應(yīng)該沒有問題。
②附加條件的求和
因為要進行從大到小的順序排名,因此我們需要統(tǒng)計大于等于這個數(shù)的個數(shù)。
想一想,為什么?
(比如,對于排名第一的數(shù),大于等于它的只有它自己,排名第二的數(shù),大于等于它的只有第一和它自己……所以,想要求一個數(shù)在一組數(shù)中的排名,計算出這組數(shù)中大于等于這個數(shù)的個數(shù)即可)
所以要加上一個附加條件:(B2<=B$2:B$9),而根據(jù)SUMPRODUCT函數(shù)的萬能公式,這個條件需要與求和區(qū)域進行相乘。
因此,最后的合成公式就是:
=SUMPRODUCT((B2<=B$2:B$9)/COUNTIF(B$2:B$9,B$2:B$9))
最終公式的含義是:以 符合(B2<=B$2:B$9)為條件,統(tǒng)計區(qū)域中不重復(fù)元素的個數(shù)最后就得到了【中國式排名】的結(jié)果。