分享

FREQUENCY和MMULT巅峰对决,看懂方显深厚函数功底

 EXCEL应用之家 2022-05-16 发布于上海


送人玫瑰,手有余香,请将文章分享给更多朋友

动手操作是熟练掌握EXCEL的最快捷途径!

【置顶公众号】或者【设为星标】及时接收更新不迷路



小伙伴好,今天和大家一起来探讨一道文本问题。题目是这样子的:

在一串文本字符串中,计算出有多少个数字,其中有多少个数字是有重复的,有多少个数字是没有重复的。



这个题目也具有一定的代表性。在日常工作中我们也会经常遇到需要提取不重复数字的案例。

下面我们一起来看看该如何解决这个问题。


01

有多少个数字

这个问题我们可以直接使用MID函数来处理。



在单元格B2中输入公式“=COUNT(0/IF(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),ROW(INDIRECT("1:"&LEN(A2))),0))”,三键回车并向下拖曳即可。

思路:

  • MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)部分,依次从第一位开始,提取长度为1的字符,结果是一组文本和数字混合的内存数组。其中ROW(INDIRECT("1:"&LEN(A2)))部分动态提取了源数据的字符长度

  • ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))部分,减负运算后将数值部分转换为TRUE,错误值转换为FALSE

  • IF函数做判断,数值部分返回对应位置上的数字,其余返回0

  • 接下来又是一个经典应用。0/IF部分,将数值转换为0,将0转换为错误值

  • COUNT函数统计出数字部分的个数


02

有几个重复数字

这个问题我们分别用MMULT函数和FREQUENCY函数来解答。



在单元格C2中输入公式“=SUM(IFERROR(1/--SUBSTITUTE(MMULT(--(MID(A2,ROW(INDIRECT("9:"&(B2+8))),1)=TRANSPOSE(MID(A2,ROW(INDIRECT("9:"&(B2+8))),1))),ROW(INDIRECT("1:"&B2))^0),"1","0"),0))”,三键回车并向下拖曳即可。

思路:

  • MID(A2,ROW(INDIRECT("9:"&(B2+8))),1)部分,从源字符串的第9位开始,到底26位结束,依次提取长度为1的数字

  • MID(A2,ROW(INDIRECT("9:"&(B2+8))),1)=TRANSPOSE(MID(A2,ROW(INDIRECT("9:"&(B2+8))),1))部分,形成了一个二维的矩阵

  • --(MID(A2,ROW(INDIRECT("9:"&(B2+8))),1)=TRANSPOSE(MID(A2,ROW(INDIRECT("9:"&(B2+8))),1)))部分,通过减负运算将矩阵中的TRUE和FALSE转换为1和0

  • MMULT(--(MID(A2,ROW(INDIRECT("9:"&(B2+8))),1)=TRANSPOSE(MID(A2,ROW(INDIRECT("9:"&(B2+8))),1))),ROW(INDIRECT("1:"&B2))^0)部分,通过MMULT函数计算出每个数字的个数。凡是个数大于1的,即表示有重复出现

  • SUBSTITUTE(MMULT(--(MID(A2,ROW(INDIRECT("9:"&(B2+8))),1)=TRANSPOSE(MID(A2,ROW(INDIRECT("9:"&(B2+8))),1))),ROW(INDIRECT("1:"&B2))^0),"1","0")部分,用“0”替换掉“1”,即替换掉不重复的数字部分

  • 减负运算后转换为数值

  • 1/--SUBSTITUTE()部分,是一个求不重复数字个数的经典应用

  • IFERROR函数屏蔽错误值,SUM函数求和得到不重复数字的个数

下面是FREQUENCY函数的解题方法。



在单元格C2中输入公式“=COUNT(1/(--(FREQUENCY(--MID(A2,ROW(INDIRECT("9:"&(B2+8))),1),--MID(A2,ROW(INDIRECT("9:"&(B2+8))),1))>1)))”,三键回车并向下拖曳即可。

思路:

  • MID(A2,ROW(INDIRECT("9:"&(B2+8))),1)部分和上例中的思路是一样的

  • 减负运算后利用FREQUENCY函数计频,得到每个数字的个数

  • FREQUENCY()>1部分,做一个判断,大于1即有重复出现

  • 减负运算后利用COUNT函数求的重复数字的个数


03

不重复数字个数

这个很简单。既然我们已经求出重复数字的个数了,只需要在原公式中稍微修改就可以了。



在单元格D2中输入公式“=COUNT(1/(--(FREQUENCY(--MID(A2,ROW(INDIRECT("9:"&(B2+8))),1),--MID(A2,ROW(INDIRECT("9:"&(B2+8))),1))=1)))”,三键回车并向下拖曳即可。

小伙伴们,你们知道是做了哪些修改并理解其含义吗?欢迎大家关注并私信我哦!


好了朋友们,今天和大家分享的内容就是这些了!喜欢我的文章请分享、转发、点赞和收藏吧!如有任何问题可以随时私信我哦!

-END-

长按下方二维码关注EXCEL应用之家

面对EXCEL操作问题时不再迷茫无助

我就知道你“在看”

推荐阅读

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多