今天和你们分享Excel中提取不重复值的几种方法,着重介绍【5种】基础操作方法,另外附送一个VBA去重代码,拿去就可以直接使用。
一、基础操作方法
1、数据工具直接去重(见下图)
数据工具去重
2、高级筛选(见下图)
高级筛选去重
3、数据透视表(见下图)
数据透视表方法去重
4、条件格式(见下图)
条件格式去重
注:
①条件格式去重的公式:=AND($A1<>””,COUNTIF($A$1:$A1,$A1)>1)
②设置的单元格格式为【;;;】,这个表示什么意思,可以查看我之前的文章;
③这种方式,并不是真正意义的去重,只是将重复的内容不显示出来;
点击链接,带你认识【;;;】
5、使用数据表的设计模式(见下图)
数据表的设计模式数据去重
二、VBA方法(下面的代码可直接拿去用)
VBA去重
VBA去重,最常用的方法就是数组+字典,本例使用的代码如下:
Sub 数据去重()
Dim Arr, Brr, a%, b%, Str1, Str2
Dim Dic As Object
Set Dic = CreateObject("scripting.dictionary")
Set Str1 = Application.InputBox("请选择要去重的数据区域", "选择数据", , , , , , 8)
Arr = Range(Str1.Address)
If Not IsArray(Arr) Then Exit Sub '如果不存在数据源选项,则arr非数组,那么退出程序
For a = 1 To UBound(Arr, 1)
For b = 1 To UBound(Arr, 2)
If Arr(a, b) <> "" Then Dic(Arr(a, b)) = "" '单元格非空,则装入字典
Next
Next
Brr = Dic.keys
Set Str2 = Application.InputBox("请确定数据存放的单元格", "选择数据存放的单元格", , , , , , 8)
Range(Str2.Address).Resize(Dic.Count, 1) = Application.Transpose(Brr)
Set Dic = Nothing '释放字典内存
End Sub
此代码做了灵活设置处理,支持自己选择区域,而并非只能对固定区域内容去重,有需要的朋友可以直接拿去使用。
三、函数公式去重
1、公式组合套路
用公式对数据去重,效率不是很高,且遇到数据量很大的时候,文件的运行会卡顿。但是既然说到去重,还是应该介绍下公式去重的套路(效果见下图)。
公式去重
下面是去重公式的套路组合,拿去就可以直接套用:
=INDIRECT(“A”&SMALL(IF(MATCH(数据区域,数据区域,)=ROW($1:$16),ROW($1:$16),4^6),ROW(A1)))&””
套路解析:
①【A】表示数据所在的列;
②【数据区域】:需要去重的数据,需要绝对引用;
③【ROW($1:$16)】:这里的16表示数据区域的高度,要根据实际情况调整;
④公式是数组公式,需要按组合键【Ctrl+Shift+Enter】结束。
当然,此处也可以用OFFSET函数或者INDEX函数,根据自己的情况合理选择即可。
2、高版本专有函数
如果你是Office 365的用户,还有一个更方便的函数【UNIQUE 函数】
UNIQUE 函数去重
3、自定义函数
如果是低版本的用户,不想用复杂的套路组合,又要实现不重复数据的实时更新,就只能使用自定义函数了。效果见下图:
自定义函数去重
自定义函数的代码如下:
Function QuChong(Rng As Range, Optional i As Integer, Optional Str As String = ",")
'函数作用:去除重复项
'函数名:QuChong。此函数有三个参数:Rng、i、Str
'Rng:需要去重的数据区域
'i(可忽略):去重选项,如果i=0,则去重后合并;如果i>0,则依次提取出内容
'Str(可忽略):用于当i=0时,合并用的连接符。
Dim Arr,Brr, a%, b%
Dim Dic
Set Dic = CreateObject("scripting.dictionary")
If Rng.Count = 0 Then QuChong = ""
Arr = Rng
For a = 1 To UBound(Arr, 1)
For b = 1 To UBound(Arr, 2)
If Arr(a, b) <> "" Then
Dic(Arr(a, b)) = "" '单元格非空,则装入字典
End If
Next
Next
Brr = Dic.keys
If i = 0 Then
QuChong = VBA.Join(Dic.keys, Str)
ElseIf i > 0 Then
If i <= Dic.Count Then
QuChong = Brr(i - 1)
Else
QuChong = ""
End If
Else
QuChong = "参数错误"
End If
End Function
函数作用:去除重复项;
函数名:QuChong。此函数有三个参数:Rng、i、Str;
Rng:需要去重的数据区域;
i(可忽略,忽略是默认为0):去重选项,如果i=0,则去重后合并;如果i>0,则依次提取出不重复内容;
Str(可忽略,忽略时默认为逗号):用于当i=0时,合并用的连接符。