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

引言:本文的练习整理自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)

相关推荐

  • 强大的查找定位函数match的用法

    今天说一个查找定位函数match的用法,它是按特定的顺序搜索特定的项,然后返回该项在此区域或数组中的相对位置,经常与其他查找引用函数结合使用,比如index,vlookup,offset等. -01- ...

  • Excel提取唯一值公式大全!

    今天我们来给大家分享一下,关于Excel中使用公式去重的各种写法,大家除了关注方法,更多的是去思考思路! 对!我们的需求就是这么简单,重复的提取一个! 我们看看有多少种写法. 公式1 ▼数组公式,记得 ...

  • 同一类别项目的中式排名

    上一次推文我们讲解了同一类别项目的美式排名,今天再来看一下同一类别项目的中式排名,中式排名的概念在此也不多说,如果不清楚这个概念,要先弄明白再看接下来的案例.如下图,是两个班级的几个学生的成绩,现在想 ...

  • 统计不重复数据

    我有手工台账如下: 小本买卖,上面都是便利店的王牌销售产品! 随着种类的不断丰富,我想知道我进货的种类一共有多少! 怎么做? 思路一: 文字描述: 找到每一个品种在整个列表中有几个,如果有N个,则自己 ...

  • Excel公式技巧98:总计单元格文本中的数字

    excelperfect 有些需求看起来很特别,但有时候确实会发生,而这往往是由于数据不规范造成的,例如下图1所示的示例. 图1 单元格区域A2:B19中是记录每月一些物品的领用数据,但是数值和物品名 ...

  • excel公式应用技巧:文字和数字混合的单元格,如何求和?

    编按:有些单位部分账目不够规范,譬如报销表,报销内容中文字和金额数据是记录在一起的,怎么求和得到报销金额呢?通常的做法是需要增加一列,把数据单独提取出来,然后进行求和.当然也可以用公式一步到位直接求和 ...

  • Excel公式练习96:返回不同的/重复的/唯一的字符串作为数组

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

  • Excel 公式:从文本中提取数字

    首先看一下实例图片,在一串文本中,数字有可能在文本的开始处.结尾处或中间. 现在针对这三种情况,给出三种提取数字公式. 数字在文本开始处 这种情况提取数字相对简单些,以下是通用公式: =-LOOKUP ...

  • 太变态了 ! Excel公式竟然可以这么写...(轻松解决带单位数字计算)

    工作中有时会遇到带单位的数字计算 别傻乎的让B列*C列,因为Excel无法对含文本的数字进行计算. 那怎么办?你如果问高手或网上搜,都会告诉你用函数先提取出数字,然后再相乘.如果单位不只是1个汉字,公 ...

  • 数字9.99999999E+307在Excel公式中的妙用

    Excel可以识别的最大数字是9.99999999E+307,这也是Excel允许输入到单元格中的最大数.这个数字通常与LOOKUP函数和MATCH函数相结合,用来查找行或列中最后一个数字,或者用来查 ...

  • Excel公式技巧95:统计文本单元格的神秘公式

    excelperfect 我们想要统计某列中包含文本的单元格数量,如下图1所示. 图1 有一些附加条件: 排除包含数字的任何单元格 排除空单元格 排除包括公式结果为空字符串的任何单元格 在图1所示的示 ...

  • Excel公式练习84:提取单元格中的10位数字

    今天的练习是:如下图1所示的数据,每个单元格中包含由换行符分隔的3个数字,现在需要提取其中10位长的数字,如图1中的B列所示. 图1 先不看下面的答案,自已试试. 解决方案 公式1 可以试试下面的公式 ...

  • 文本和数字混合的列怎么排序?你看到的数值不是 Excel 认为的数值

    Excel 的数据表排序,经常也会"不听话",我们人类认为的和计算机认为的,根本就不是同一回事.比如"1月"."2月"--"12月 ...