上一篇文章向大家介绍了如何使用VBA在低版本Excel中创建unique函数的方法,今天我跟大家分享一下如何使用函数连接指定区域的唯一值,也就是将unique函数获取的唯一值连接合并成一个,并指定连接符。
同样,我们需要先创建一个自定义的ConcatenateUnique函数,简称CUnique函数,该函数有两个参数,一个是定义范围,一个是定义连接符。
使用方法如下:
例:=CUnique(C1:C7,",") ,计算结果如下图。
VBA创建CUnique函数的代码如下:
Option Explicit
Function CUnique(ByRef rngRange As Range, Optional ByVal Seperator As String = " ", Optional ByVal Format As String = "@", Optional ByVal CaseSensitive As Boolean = False) As String
' 连接指定区域的唯一值,并指定连接符。
Dim rng As Range
Dim strAnswer As String
Dim strTemp As String
Dim CompMethod As VbCompareMethod
'为InStr函数设置文本比较模式
If CaseSensitive Then
CompMethod = vbBinaryCompare
Else
CompMethod = vbTextCompare
End If
For Each rng In rngRange
strTemp = rng.Value
'仅处理非空单元格
If Not strTemp = vbNullString Then
'应用格式
strTemp = Application.WorksheetFunction.Text(strTemp, Format)
'首先初始化结果字符串, 然后合并
If strAnswer = vbNullString Then
strAnswer = strTemp
Else
'仅合并唯一值
If InStr(1, Seperator & strAnswer & Seperator, Seperator & strTemp & Seperator, CompMethod) = 0 Then
strAnswer = strAnswer & Seperator & strTemp
End If
End If
End If
Next rng
'返回结果字符串
CUnique = strAnswer
End Function
此外,我们还可以创建JoinUnique函数来实现这一效果,简称JUnique函数,使用方法跟CUnique函数相同。
使用方法如下:
例:=JUnique(C1:C7,",")
VBA创建JUnique函数的代码如下:
Option Explicit
Function JUnique(rng As Range, del As String) As String
' 连接指定区域的唯一值,并指定连接符。
Dim d As Object
Set d = CreateObject("scripting.dictionary")
Dim r As Range
Dim str As String
For Each r In rng
str = r.Value
'仅处理非空单元格
If Not str = vbNullString Then
d(r.Text) = ""
End If
Next
JUnique = Join(d.keys, del)
End Function
JUnique函数的代码比较简洁,但计算速度较CUnique函数慢一些,大家可以根据具体需要选择使用。关于CUnique函数的应用实例,可以参考《VBA检查指定范围是否存在重复值》一文。