今天,同事发给我一个表格,需要制作纸箱唛头,但是她里面的型号有些是重复的,由于excel中自带的函数不具备去除重复值得功能,所以只能利用vba来自己编写函数,见图:
但是这些重复的内容都是以固定的符号隔开的,所以,我们利用数组和字典方案解决。
首先,我们打开这个工作表,然后选择文件-选项-自定义功能区-开发者工具,勾选,确定。如下图
然后按下ALT F11组合键盘,弹出vba开发窗口,然后点击插入——模块
随便插入一个模块就行哈,然后双击模块,把下面这段黄色背景代码复制到右边的空白区域就可以
Public Function 提取不重复值(ByVal 单元格 As Range, ByVal 间隔符号 As String) As String '定义函数过程,值传递,返回值类型为字符串
'字典调用方法一:引用法(前期绑定)
'vba ide-工具-引用-浏览-windows-system32找到scrrun.dll-确定
'Dim 字典 As Object '定义一个字典变量,貌似后期声明字典不起作用
'Set 字典 = CreateObject("scripting.Dictionary")'貌似后期声明字典不起作用
'*******************************定义区域*****************************************
Dim 字典 As New Dictionary '定义一个字典变量
Dim 结果 As String '定义结果
Dim 数组 As Variant '定义一个数组
Dim 数组元素 As Variant '定义一个数组元素
Dim 字典条目 As Variant '定义一个数组元素
Dim rng As Range
'*******************************代码开始区域*****************************************
'功能一
If Len(间隔符号) >= 0 Then
数组 = Split(单元格.Value, 间隔符号) '利用拆分函数通过固定间隔符号对内容进行元素拆分
For Each 数组元素 In 数组 '遍历数组元素
字典(Trim(数组元素)) = "" '这里把每个元素所对应的条目进行修改,字典的特性是没有这个条目就把这个条目加进去,顺便清除重复项
Next
End If
'功能二
For Each 字典条目 In 字典 '提取字典里的条目写入单元格
结果 = 结果 & 间隔符号 & 字典条目 '将其字符串连接
Next
提取不重复值 = Replace(结果, 间隔符号, "", 1, 1)
字典.RemoveAll
End Function
'*******************************代码结束区域*****************************************
结果如下显示:
然后我们就要手动加载 字典了
还是这个vba窗口,工具-引用-浏览-windows-system32找到scrrun.dll-确定,就加载完成
然后我们就可以在表格中输入函数了
结果如下图:
好了,今天的学习就到这,谢谢大家
,