一、案例
如下图所示,A2:A10为一系列景点名称,各景点名称重复出现。要求提取A2:A10的唯一值,并按各景点重复出现的次数,从多到少排列,效果如C2:D4所示。
二、计算步骤
1、在C2单元格输入公式
=IFERROR(INDEX($A$2:$A$10,MATCH(LARGE(IF(COUNTIF($C$1:C1,$A$2:$A$10)=0,COUNTIF($A$2:$A$10,$A$2:$A$10),""),1),COUNTIF($A$2:$A$10,$A$2:$A$10)*(COUNTIF($C$1:C1,$A$2:$A$10)=0),0)),"")
按Ctrl+Shift+Enter结束公式输入,拖动填充柄向下复制公式,直至出现空值。
公式解析:
(1)IFERROR函数用于屏蔽错误值。当已提取出A2:A10单元格的所有唯一值后,返回空值。
(2)INDEX函数可以返回指定行列交叉处单元格的值,其语法为INDEX(array,row_num,[col_num])。本例中,INDEX函数的array参数为A2:A10;row_num参数为MATCH+LARGE+IF+COUNTIF函数组合返回的值。
(3)MATCH函数返回特定值在单元格区域中的相对位置,语法为MATCH(lookup_value,lookup_array,[match_type])。
本例中lookup_value参数为
LARGE(IF(COUNTIF($C$1:C1,$A$2:$A$10)=0,COUNTIF($A$2:$A$10,$A$2:$A$10),""),1)
lookup_array参数为
COUNTIF($A$2:$A$10,$A$2:$A$10)*(COUNTIF($C$1:C1,$A$2: $A$10)=0)
match_type参数为0,指精确匹配。
(4)LARGE函数用于返回数组中的第k个最大值,语法为LARGE(array,k)。本例中
LARGE(IF(COUNTIF($C$1:C1,$A$2:$A$10)=0,COUNTIF($A$2:$A$10,$A$2:$A$10),""),1)指返回IF+COUNTIF函数生成的数组中的最大值。
(5)COUNTIF($A$2:$A$10,$A$2:$A$10)返回A2:A10
各单元格的文本在A2:A10出现的次数,返回结果为{4;3;2;4;4;3;4;2;3};COUNTIF($C$1:C1,$A$2:$A$10)返回A2:A10各单元格的文本在C1:C1出现的次数,返回结果为{0;0;0;0;0;0;0;0;0}
(6)
IF(COUNTIF($C$1:C1,$A$2:$A$10)=0,COUNTIF($A$2:$A$10,$A$2:$A$10),"")返回结果为{4;3;2;4;4;3;4;2;3}
(7)
COUNTIF($A$2:$A$10,$A$2:$A$10)*(COUNTIF($C$1:C1,$A$2: $A$10)=0)返回结果为{4;3;2;4;4;3;4;2;3}
2、在D2单元格输入公式
=COUNTIF($A$2:$A$10,C2)
拖动填充柄向下复制公式。
COUNTIF($A$2:$A$10,C2)用于计算C2单元格的文本(“羊羊村”)在A2:A10单元格区域出现的次数。
END
联系客服