分享

Excel公式练习98:从文本和数字组成的数组中返回不同的/重复的/唯一的值组成的数组

 hercules028 2021-09-24

引言:本文的练习整理自chandoo.org。多一些练习,想想自己怎么解决问题,看看别人又是怎样解决的,能够快速提高Excel公式编写水平。

在《Excel公式练习95:返回不同值/重复值/唯一值作为数组》中,我们处理了从仅包含数值的区域中提取不同的/重复的/唯一的值的数组。

在《Excel公式练习96:返回不同的/重复的/唯一的字符串作为数组》中,我们处理了从仅包含文本值的区域中提取不同的/重复的/唯一的值的数组。

本次的练习是:你能想出一个公式,从包含数字和文本值的区域中提取一组不同值、重复值和唯一值。要求:

  • 原始数据区域命名为“data”,在公式中可以引用该区域。除此之外,不应使用任何命名区域或中间单元格。

  • 每个公式的输出必须是一个数组,可以直接被其他公式(如 COUNTA等)使用。也就是说,我们追求的是一个可以直接合并到其他公式中的公式,而不是必须在工作表区域内输入才能工作的公式。

  • 每个公式都应该是完全动态的,并且能够用于任何大小的一维数组。

  • 每个公式必须返回一个精确大小的数组,其中只包含不同的、重复的和唯一的值。因此,根据下图1所示数据,输出为:

不同值公式生成的数组正好是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键或者公式求值功能,加深对上述公式的理解。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多