Excel情报局
职场联盟Excel
生产挖掘分享Excel基础技能
Excel爱好者大本营
用1%的Excel基础搞定99%的职场问题
做一个超级实用的Excel公众号
Excel是门手艺玩转需要勇气
数万Excel爱好者聚集地
SUPER EXCEL MAN
1
职场实例
今天小编遇到了这样的一个问题:
如何对【同一单元格内】用分隔符间隔开来的数据去重?
在职场办公中,真是啥Excel表格问题都会遇到,真是应了最近抖音上非常火的一句话:真是职场办公(人生)无常,大肠包小肠!
我们来用下面几组简单的数据在Excel中模拟一下具体的工作场景:
A列为我们遇到的原始数据,我们观察一下A列每个单元格的数据特点:
发现每个单元格中的数据都是由若干个相同的分隔符“/”,将几组数据间隔开来的,非常的有规律。但是被分隔符间隔开来的数据含有重复值,比如A1单元格“A/B/A/B”,含有重复的字符A和B,我们想要去除重复值,保留唯一值,去重后的数据如B2单元格所示:“A/B”。
有的小伙伴遇到这个问题,可能在自己的脑海中快速浮现出的功能是“删除重复值”对吧,但是Excel中【数据】-【数据工具】-【删除重复值】功能是不能实现今天这个去重场景的。我们看到微软Office对于【删除重复值】的解释:
“删除工作表中的重复行,可以选择应检查哪些列的重复信息”。所以它删除的是重复的行信息,针对的是整个单元格,而不能对单元格内的具体信息辨别去重。
2
问题解答
针对这样的工作场景,Excel没有提供给我们一个最直接的功能按钮解决这样的问题。但我们可以使用VBA代码快速的解决今天的问题。
【代码如下】:
Sub lqxs()Dim Arr, i&, aa, j&, Brr, dSet d = CreateObject("Scripting.Dictionary")Sheet1.ActivateArr = [a1].CurrentRegionReDim Brr(1 To UBound(Arr), 1 To 1)For i = 2 To UBound(Arr) If InStr(Arr(i, 1), "/") Then aa = Split(Arr(i, 1), "/") For j = 0 To UBound(aa) If aa(j) <> "" Then d(aa(j)) = "" Next End If Brr(i, 1) = Join(d.keys, "/") d.RemoveAllNext[b1].Resize(UBound(Brr), 1) = BrrEnd Sub
代码是现成的,所以不需要我们自己去复杂的编写,直接复制粘贴即可。
运行VBA代码的【三步】经典步骤:
①【打开VBA代码编辑器】
鼠标右击工作表名称标签,点击【查看代码】(或按快捷键Alt+F11键),进入到VBA代码编辑器窗口。
②【复制粘贴代码】
将上面的一段代码复制并粘贴到VBA代码编辑器窗口内。
③【运行代码】
点击编辑器窗口上方的【运行-运行子过程/用户窗体】按钮。
具体操作步骤如下图所示:
3
代码释义
代码:Arr = [a1].CurrentRegion
其中[a1]代表要进行去重的数据所在的列即A列。根据实际情况进行灵活变更。
代码:For i = 2 To UBound(Arr)
其中2代表要从A列数据源中的第2个单元格开始进行去重。根据实际情况进行灵活变更。
代码:If InStr(Arr(i, 1), "/") Then
代码:aa = Split(Arr(i, 1), "/")
代码:Brr(i, 1) = Join(d.keys, "/")
其中的“/”代表每个单元格中的分隔符“/”。根据实际情况进行灵活变更。
代码:[b1].Resize(UBound(Brr), 1) = Brr
其中[b1]代表去重后的数据放置的位置即B列。根据实际情况进行灵活变更。
回顾关键内容,善用图片表达,学会建立联系,拓展深度广度,浓缩关键概念,应用到行动中,善于归纳总结,尝试进行分享。