二维码 购物车
部落窝在线教育欢迎您!

提取不重复值并统计数量的三个方法,一秒完成!

 

作者:E图表述来源:部落窝教育发布时间:2021-03-23 11:06:55点击:5868

分享到:
0
收藏    收藏人气:0人
版权说明: 原创作品,禁止转载。

编按:

如何提取不重复值并统计数量?这是EXCELER在工作中普遍会遇到的问题。今天,小E给大家带来的就是从三个角度,用三种完全不同的方式去处理这类问题的方法。不管你是EXCEL小白还是有一定经验的数据民工,又或者是想成为大神的EXCEL老鸟,都能在这篇文中,找到适合你的方法。一秒搞定提取不重复值,其实很简单……

 

【前言】

今天说的EXCEL问题,其实在大家的日常工作中经常会遇到,例如下面的这个图:

 

 

这个问题中,A列中只列出了30行的数据,而实际工作中的数据情况则会有更多的变化。鉴于一切问题的解决方法都是“万变不离其宗”的,所以笔者将就上图的问题,给大家分别讲述三个不同的解决方法。看完以后,相信大家无论遇到再怎么复杂的同类问题,都会有思路去解决,而不至于“手足无措”。

 

【正文】

 

最简单的处理方式

对于提取不重复值的处理方法,笔者认为最简单的方式就是使用工具栏中的“删除重复值”功能键来实现。

 

 

首先选中A列,选择性粘贴为数值,粘贴到D列;然后选中D列,再点击工具栏——“数据”选项卡——“删除重复值”。这样我们就完成了提取唯一值的过程,如下图所示:

 

 

然后在E2单元格中输入函数:

=COUNTIF(A:A,D2)

下拉填充E2:E7单元格区域,及此完成操作。

 

点评:笔者认为,这个方式可能对于小伙伴们来说,是最容易上手而且是最直接的操作方式,简单两步就可以完成。虽然每次统计的时候都需要手动操作一遍,好在是不复杂。

 

最慌的处理方式

 

Hohoho,之所以叫它是“最慌”的处理方法,是因为它需要使用被EXCELER们称为“万金油”的公式。这个名字应该是如雷贯耳了吧,很多小伙伴估计都听过,也都知道万金油是处理去重并提取唯一值的利器。虽然在《EXCEL教程》的许多教程中都有相关案例,但依然有很多小伙伴不能很好的理解并使用它。

 

即使大家一看到“去重并提取唯一值”,就想到“万金油”公式,但一动手用“万金油”公式,还是只会“慌的一批”~~~

 

 

D2单元格输入函数:

{=IFERROR(INDEX($A$2:$A$31,SMALL(IF(MATCH($A$2:$A$31,$A$2:$A$31,0)=ROW($A$1:$A$30),ROW($A$1:$A$30),99^9),ROW(D1))),"")}

 

公式解析:

MATCH($A$2:$A$31,$A$2:$A$31,0)=ROW($A$1:$A$30)

利用MATCH函数,判定A2:A31区域中的值,第一次出现的序号,是否和行号一致。

IF(……,ROW($A$1:$A$30),99^9)

利用IF函数,返回索引值。如果MATCH()中的行号一致,则返回行号;如果不一致,则返回99^9(一个绝对大的值)

SMALL(……,ROW(D1))

利用SMALL函数,提取前两步中返回的值,因为我们的函数需要下拉,那么ROW(D1)的值,就会随着下拉而随动,此函数的意义就变成,第1最小的值、第2最小的值、第3最小的值……

INDEX($A$2:$A$31,……)

A2:A31中,提取第x个位置上的值,这个x值就是刚才SMALL()中返回的值。

=IFERROR(……,"")

最后使用IFERROR函数容错,使得错误值不出现。

 

点评:笔者认为,如果大家的函数水平还算过硬,那还是推荐大家使用这个方法。因为公式可以随着数据源的变化而变化,得出当前的结果,不需每次都要操作一遍。这个方法对于形成函数类型的模板是相当实用。

 

最正确的处理方式

 

最后一种方法,是笔者在工作中处理此类问题时,经常使用的方法。

 

可能对于有的小伙伴来说,它是一个“谈虎色变”的方法。但是不容否定的说,这个方法——VBA字典去重,才是真正打开“EXCEL去重”正确使用方式的方法。

 

 

首先按ALT+F11,打开VBE界面。在左侧的“工程窗口”中插入模块,然后在代码窗口中输入代码:

 

Sub 去重()

  Dim arr, d

  arr = Sheets("最对").Range("A2:A31")

  Set d = CreateObject("scripting.dictionary")

  For i = 1 To UBound(arr)

    d(arr(i, 1)) = d(arr(i, 1)) + 1

  Next i

  Sheets("最对").[D2].Resize(d.Count, 1) = Application.Transpose(d.keys)

  Sheets("最对").[E2].Resize(d.Count, 1) = Application.Transpose(d.items)

End Sub

 

小伙伴们运行代码后,就可以得到去重后的字段和相应的次数。

 

点评:笔者认为,EXCEL最大的魅力在于它的办公自动化,VBA又是在此基础上更进一步让大家真正实现办公自动化的操作。一段简单的代码,可以让你解放双手的同时,还可以提高表格统计的效率和计算的正确性。

 

【编后语】

此篇教程到这里就结束了,希望可以给大家带来一些思考。数组函数也好,VBA也好,都是需要大家对数据有深度地理解和逻辑思考能力。我们到底算不算一个“数据人”,在处理同一个问题时,看你选择哪种数据处理方法就已然可以判断了。

 

本文配套的练习课件请加入QQ群:902294808下载。

Excel高手,快速提升工作效率,部落窝教育《一周Excel直通车》视频和《Excel极速贯通班》直播课全心为你!

扫下方二维码关注公众号,可随时随地学习Excel

IMG_256

相关推荐:

4种删除excel重复值的小妙招,速收藏

两个神仙技巧,带你看破excel统计不重复数的秘密

两个神仙技巧,带你看破excel统计不重复数的秘密(下篇)

Excel,原来你有真假重复!

版权申明:

本文作者E图表述;同时部落窝教育享有专有使用权。若需转载请联系部落窝教育。