Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)

今天和你们分享Excel中提取不重复值的几种方法,着重介绍【5种】基础操作方法

,另外附送一个VBA去重代码,拿去就可以直接使用。


一、基础操作方法

1、数据工具直接去重(见下图)

Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)

数据工具去重

2、高级筛选(见下图)

Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)

高级筛选去重

3、数据透视表(见下图)

Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)

数据透视表方法去重

4、条件格式(见下图)

Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)

条件格式去重

注:

①条件格式去重的公式:=AND($A1<>"",COUNTIF($A$1:$A1,$A1)>1)

②设置的单元格格式为【;;;】,这个表示什么意思,可以查看我之前的文章;

③这种方式,并不是真正意义的去重,只是将重复的内容不显示出来;

5、使用数据表的设计模式(见下图)

Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)

数据表的设计模式数据去重


二、VBA方法(下面的代码可直接拿去用)

Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)

VBA去重

VBA去重,最常用的方法就是数组+字典,本例使用的代码如下:

<code>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/<code>

此代码做了灵活设置处理,支持自己选择区域,而并非只能对固定区域内容去重,有需要的朋友可以直接拿去使用。


三、函数公式去重

1、公式组合套路

用公式对数据去重,效率不是很高,且遇到数据量很大的时候,文件的运行会卡顿。但是既然说到去重,还是应该介绍下公式去重的套路(效果见下图)。

Excel中提取不重复值的方法汇总(5种基础+VBA+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 函数】

Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)

UNIQUE 函数去重

3、自定义函数

如果是低版本的用户,不想用复杂的套路组合,又要实现不重复数据的实时更新,就只能使用自定义函数了。效果见下图:

Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)

自定义函数去重

自定义函数的代码如下:

<code>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/<code>

函数作用:去除重复项;

函数名:QuChong。此函数有三个参数:Rng、i、Str;

Rng:需要去重的数据区域;

i(可忽略,忽略是默认为0):去重选项,如果i=0,则去重后合并;如果i>0,则依次提取出不重复内容;

Str(可忽略,忽略时默认为逗号):用于当i=0时,合并用的连接符。


我是上班下班,因为爱好办公软件、喜欢分享。所以来到这里将我的学习心得和踩过的一些坑,和大家聊聊,希望大家学习我成功的经验,避开我踩过的坑。我和你们一起进步。

好了,今天就聊到这里,感谢各位朋友的关注和支持。

如果你喜欢我分享的内容,请点个赞支持下;

如果你觉得我分享的内容对你有帮助,可以关注我;

如果要看我以前分享过的好玩的内容,大家可以去我的主页查看历史文章。


分享到:


相關文章: