一、案例 如下图所示,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 |
|