函數名稱:FREQUENCY
函數語法:=FREQUENCY(Data_array,Bins_array)
難度等級:★★★★★
FREQUENCY也是大佬們常用的一個函數,它的作用是以一列垂直數組返回一組數據的頻率分布。聽起來是不是有點懵?說白了就是區間計數,默認區間左開右閉(兩端除外),例如:(9E307表示9乘以10的307次方,是Excel2019允許輸入的最大數值)FREQUENCY第一參數是要統計的數組,即上圖a1:a20區域;第二參數是分段點數組,為了設置分段點,需要做一個輔助列:為了避免使用輔助列,也可以將分段點寫成常量數組的形式:
=FREQUENCY(A1:A20,{20;40;60;80;100})下面再看一個例子:
解法一:lookup、frequency、sumif、row函數組合公式如下(左右滑動可查看完整公式):
=LOOKUP(1,0/FREQUENCY(ROW(A1),SUMIF(OFFSET(B$1,,,ROW($1:$10)),">0")),A$1:A$10)&""由於lookup、frequency均支持數組運算,直接回車即可,不用三鍵。
公式解析:
首先,OFFSET(B$1,,,ROW($1:$10))這一部分:二、三參數省略,表示以b1為基點,沒有橫向或縱向偏移;三參是內存數組ROW($1:$10),表示每次從b1開始向下選取高度為1,2,3,……10的十個區域,即b1,b1:b2,b1:b3……b1:b10。其次,SUMIF(OFFSET(B$1,,,ROW($1:$10)),">0")表示將這十個區域內部相加,形成一個10個數的垂直數組{3;3;4;9;16;20;26;29;33;36};再次,SUMIF配合frequency以這10個數為分段點來分割1(即row(a1)),1在<=3這個區間,故frequency第一個值為1,其他區間均為0;最後,lookup二參0/1結果是0,0/0必然會報錯,故lookup第二參數運行結果是{0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!},lookup有兩個特性:1、自動忽略錯誤值;2、查找一個值會返回不超過它的最大值(這一點和vlookup模糊匹配很相似)。故LOOKUP(1,{0;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!},A$1:A$10) 查找的是二參第一個值,會對應返回三參第一個值a1。至於公式後面&「」,是為了避免引用空值顯示為0。解法二:lookup、frequency、mmult、n 、transpose、row函數組合公式輸完後,注意使用三鍵:Ctrl+shift+enter
公式如下(左右滑動可查看完整公式):
=LOOKUP(1,0/FREQUENCY(ROW(A1),MMULT(N(ROW($1:$10)>=TRANSPOSE(ROW($1:$10))),B$1:B$10)),A$1:A$10)&""解法三:萬金油公式
公式輸完後,注意使用三鍵:Ctrl+shift+enter
公式如下(左右滑動可查看完整公式):
=INDEX($A$1:$A$10,SMALL(IF($B$1:$B$10>=COLUMN(A:Z),ROW($1:$10)),ROW(A1)))
解法四:power query逆透視
數據透視表大家都很熟悉,就是將一維數據轉換為二維數據。Excel2016及以上版本新增了數據處理功能十分強大的power query,本題的目的就是將二維錶轉為一維表,所以是逆透視,使用power query分分鐘搞定!