引言:本文的练习整理自chandoo.org。多一些练习,想想自己怎么解决问题,看看别人又是怎样解决的,能够快速提高Excel公式编写水平。 在《Excel公式练习95:返回不同值/重复值/唯一值作为数组》中,我们处理了从仅包含数值的区域中提取不同的/重复的/唯一的值的数组。 在《Excel公式练习96:返回不同的/重复的/唯一的字符串作为数组》中,我们处理了从仅包含文本值的区域中提取不同的/重复的/唯一的值的数组。 本次的练习是:你能想出一个公式,从包含数字和文本值的区域中提取一组不同值、重复值和唯一值。要求:
不同值公式生成的数组正好是14个元素。 唯一值公式生成的数组的长度正好是9个元素。 重复值公式生成的数组长度正好是5个元素 示例数据如下图1所示。其中,将单元格区域A2:A21命名为“data”。 图1 不应该使用任何辅助单元格、中间公式或者VBA。 注:不同值,是指不重复的数字。 唯一值,是指数字只出现一次。 重复值,是指数字出现不止一次。 写下你的公式。 解决方案 下面均为数组公式。 公式1: 不同值: =LOOKUP(MODE.MULT(IF(MATCH(data,data,0)=(ROW(data)-MIN(ROW(data))+{1,1}),ROW(data))),ROW(data),data) 唯一值: =LOOKUP(MODE.MULT(IF(COUNTIF(data,data)=1,ROW(data)*{1,1})),ROW(data),data) 重复值: =LOOKUP(MODE.MULT(IF((COUNTIF(data,data)>1)*MATCH(data,data,0)=ROW(data)-MIN(ROW(data))+{1,1},ROW(data))),ROW(data),data) 公式2: 不同值: =INDEX(A:A,SMALL(IF(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>0,ROW(data)),ROW(OFFSET(B1,,,SUM(N(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>0)))))) 唯一值: =INDEX(A:A,SMALL(IF(FREQUENCY(MATCH(data,data,),MATCH(data,data,))=1,ROW(data)),ROW(OFFSET(B1,,,SUM(N(FREQUENCY(MATCH(data,data,),MATCH(data,data,))=1)))))) 重复值: =INDEX(A:A,SMALL(IF(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>1,ROW(data)),ROW(OFFSET(B1,,,SUM(N(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>1)))))) 公式3: 不同值: =LOOKUP(SMALL(IF(FREQUENCY(MATCH(data,data,),MATCH(data,data,)),ROW(data)),ROW(OFFSET(A1,,,SUM(1/COUNTIF(data,data))))),ROW(data),data) 唯一值: =LOOKUP(SMALL(IF(COUNTIF(data,data)=1,ROW(data)),ROW(OFFSET(A1,,,SUM(N(COUNTIF(data,data)=1))))),ROW(data),data) 重复值: =LOOKUP(SMALL(IF(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>1,ROW(data)),ROW(OFFSET(A1,,,SUM(N(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>1))))),ROW(data),data) 公式4: 不同值: =OFFSET(OFFSET(A1,SMALL(IF(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>0,ROW(data)),ROW(OFFSET(A1,,,SUM(1/COUNTIF(data,data)))))-1,0),,) 唯一值: =OFFSET(OFFSET(A1,SMALL(IF(COUNTIF(data,data)=1,ROW(data)),ROW(OFFSET(A1,,,SUM(N(COUNTIF(data,data)=1)))))-1,),,) 重复值: =OFFSET(OFFSET(A1,SMALL(IF(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>1,ROW(data)),ROW(OFFSET(A1,,,SUM(N(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>1)))))-1,),,) 公式5: 不同值: =CELL('contents',OFFSET(A1,SMALL(IF(FREQUENCY(MATCH(data,data,0),MATCH(data,data,0)),ROW(data)),ROW(OFFSET(A1,,,SUM(1/COUNTIF(data,data)))))-1,)) 唯一值: =CELL('contents',OFFSET(A1,SMALL(IF(COUNTIF(data,data)=1,ROW(data)),ROW(OFFSET(A1,,,SUM(N(COUNTIF(data,data)=1)))))-1,)) 重复值: =CELL('contents',OFFSET(A1,SMALL(IF(FREQUENCY(MATCH(data,data,0),MATCH(data,data,0))>1,ROW(data)),ROW(OFFSET(A1,,,SUM(N(FREQUENCY(MATCH(data,data,),MATCH(data,data,))>1)))))-1,)) 可以通过F9键或者公式求值功能,加深对上述公式的理解。 |
|
来自: hercules028 > 《excel》