Excel函数CUnique连接合并指定区域的唯一值

       上一篇文章向大家介绍了如何使用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检查指定范围是否存在重复值》一文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TOMaster.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值