打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
去除重复项(11种解法)

去除重复项(11种解法)

http://www.excelpx.com/home/show.aspx?page=1&id=34908&cid=18

问:一列数据中如何把重复的剔除。

1、先来个最简单的高级筛选法。
2、用数据透视表无疑是个非常不错的办法,不仅剔除了重复,还可以列出来每项重复了多少次:

3、加辅助列用COUNTIF可以显示出每个出现的次数,但在实际操作过程中这种方法并不实用,倒是可以用在条件格式上,让有重复的一目了然:

**图片下载后插入到PPT里,会有不错的播放效果**

4、函数法解决:
假如表头是A1,数据是A2:A24,在C列中用公式:
C2{=OFFSET($A$1,MATCH(,COUNTIF($C$1:C1,$A$2:$A$24),),)&""}
(结果顺排)

其中:

COUNTIF($C$1:C1,$A$2:$A$24)
COUNTIF第二个参数为区域时,这就是个数组函数,返回第二个参数中每个数在第一个区域中个数的一组数。
因为$C$1:C1中没有与数据中相同的值,所以返回的结果是一组均为0的数组;当公式拉至下一个单元格时,因为$C$1:C1变成了$C$1:C2,而C2是与数据中的第一个值相同的,这样就会返回第一个为1其余为0的一组数组;类推……

MATCH(,COUNTIF(),)
这个就是查找0值在COUNTIF这个数组中第一次出现的位置。

OFFSET($A$1,MATCH(),)
以A1为参照,向下偏移。

以上函数源自兰色幻想。
关于主要段结果的数组表:

5、函数法解决:

假如表头是A1,数据是A2:A24,在C列中用公式:
C2=LOOKUP(1,1/NOT(COUNTIF($C$1:C1,$A$2:$A$24)),$A$2:$A$24)

其中:

COUNTIF($C$1:C1,$A$2:$A$24)
COUNTIF第二个参数为区域时,这就是个数组函数,返回第二个参数中每个数在第一个区域中个数的一组数。
因为$C$1:C1中没有与数据中相同的值,所以返回的结果是一组均为0的数组;当公式拉至下一个单元格时,因为$C$1:C1变成了$C$1:C2,而C2是与数据中的第一个值相同的,这样就会返回第一个为1其余为0的一组数组;类推……

NOT(COUNTIF())
把COUNTIF结果为1的转为0,结果为0的转为1。

1/NOT()
把NOT结果为1的仍保留,结果为0的转为NA

LOOKUP(1/NOT())
利用的LOOKUP模糊查找,最后一个与1对应的位置的值。

以上函数源自Abigale(372014140)
关于主要段结果的数组表:

6、函数法解决:

假如表头是A1,数据是A2:A24,在C列中用公式:
C1{=IF(SUM(1/COUNTIF($A$1:$A$24,$A$1:$A$24))>=ROW(A1),OFFSET($A$1,SMALL(IF(MATCH($A$1:$A$24,$A$1:$A$24,0)=ROW($A$1:$A$24),ROW($A$1:$A$24)),ROW(A1))-1,),"")}
(结果顺排)

其中:
SUM(1/COUNTIF($A$1:$A$24,$A$1:$A$24))
用来计算不重复个数。

IF(SUM()>=ROW(A1),OFFSET(),"")
利用不重复个数与所在行数之间的关系来假空显示重复个数以外的值。

MATCH($A$1:$A$24,$A$1:$A$24,0)
返回A1:A24内各值位置的排列,每个值都只返回第一次出现的位置。

IF(MATCH()=ROW(),ROW())
利用条件来判断,如果是第一次出现的值,则返回该值所在的行数;如不是第一次出现,返回FALSE(0)。

SMALL(IF(),ROW())
返回IF()所得一系列数组中第N小的一个,N与公式所在行的行号值一致。

OFFSET($A$1,SMALL(),)
返回自A1起向第SMALL()出的结果偏移的值。

以上函数源自小爪(461699029)
关于主要段结果的数组表:

7、函数法解决:

假如表头是A1,数据是A2:A24,在C列中用公式:
C2{=INDEX(A:A,SMALL(IF(FREQUENCY(MATCH($A$2:$A$24,$A$2:$A$24,),MATCH($A$2:$A$24,$A$2:$A$24,)),ROW($A$2:$A$24),65536),ROW(A1)))&""}

其中:
MATCH($A$2:$A$24,$A$2:$A$24,0)
返回A2:A24内各值位置的排列,每个值都只返回第一次出现的位置。

FREQUENCY(MATCH(),MATCH())
返回每个MATCH后的值的出现频次。

IF(FREQUENCY(),ROW(),65536)
当FREQUENCY值不为0时返回相对应的行号,为0时返回65536。

SMALL(IF(),ROW(A1))
返回第N小的值,这个N根据行号的变动而变动。
SMALL所返回的值,也就是数据中第一次出现的值的位置。

INDEX(A:A,SMALL())&""
这个就不用多解释了,后面的&""是为了消除0。
这里不用INDEX,而是用OFFSET($A$1,SMALL()-1,)也可以达到同样效果。

以上函数源自刀狐
关于主要段结果的数组表:


8、EXCEL2007/2010版解决:

 
9、用数据透视表无疑是个非常不错的办法,不仅剔除了重复,还可以列出来每项重复了多少次:


10、VBA解决:

Sub M()
Dim myrow As Long
Dim myrng As Range
myrow = Range("a65536").End(xlUp).Row
Set myrng = Range("a1:a" & myrow)
myrng.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B1"), Unique:=True
End Sub

其实没什么特别的,就是高级筛选而已啦……
 
11、函数法:

假设数据在B2:D15区域内
先自定义函数名称AA=T(INDIRECT(TEXT(MOD(SMALL(COLUMN($B$2:$D$15)*10001+ROW($B$2:$D$15)*10,ROW($1:$42)),1000),"R0C0"),))(源自Lukyguy2008)
再设置函数:=INDEX(aa,SMALL(IF(MATCH(aa,aa,)=ROW($B$1:$B$42),ROW($B$1:$B$42),65536),ROW(B1)),1)(数组)下拉

以上公式未消除后面的错误值,如需要消除,需要再套ISERR。
以上公式还有缺陷,即只能用于文本的剔除重复。

关于主要段结果的数组表:


 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Office 365函数新世界 :计算不重复数
Excel函数提取不重复值(唯一值)公式总结
Excel用函数公式提取唯一值
公式函数14202班第一课时查找引用函数学习暨课后作业解题思路小结
值得收藏的公式,使用公式实现对Excel数据删除重复项统计
【Excel教程】如何用函数统计不重复数据的个数?两种方法教你快速搞定
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服