删除字符串功能中的重复文本



我有一个函数可以在访问表的单列中删除重复的文本字符串:

原始价值:持卡人,对帐者,对帐者,持卡人,批准者

所需的输出:持卡人,对帐,批准者。

我具有以下功能可以实现这一目标的功能,但是如果只有一个值返回(例如,"持卡人",'cartholder,(

Function stringOfUniques(inputString As String) As String
        Dim inArray() As String
        Dim xVal As Variant
        Dim s As String
        inArray = Split(inputString, ",")
        For Each xVal In inArray
            If InStr(s, Trim(xVal)) = 0 Then _
            s = s & Trim(xVal) & " ,"
        Next xVal
        stringOfUniques = s
    End Function

应该调整哪个部分以反映这种变化?

谢谢。

添加数组的成员字符串作为Scripting.Dictionary对象的键。

然后,您可以通过连接字典的键来产生所需的输出字符串。

Public Function stringOfUniques(inputString As String) As String
    Dim xVal As Variant
    Dim strTrimmed As String
    Dim dct As Object
    Set dct = CreateObject("Scripting.Dictionary")
    For Each xVal In Split(inputString, ",")
        strTrimmed = Trim(xVal)
        If Len(strTrimmed) > 0 And Not dct.Exists(strTrimmed) Then
            dct.Add key:=strTrimmed, Item:=Null
        End If
    Next
    stringOfUniques = Join(dct.Keys, ", ")
End Function

使用instr测试字符串中是否已经存在该项目的字符串中包含其他字符串的字符串失败(例如,对于"pineapple,apple"的输入,您的方法将返回"pineapple"(。

要提供另一种方法,请考虑以下功能:

Function StringOfUniques(strArg As String) As String
    Dim col As New Collection, var
    On Error Resume Next
    For Each var In Split(strArg, ",")
        col.Add var, var
    Next var
    Dim rtn() As String, i As Long
    ReDim rtn(1 To col.Count)
    For i = 1 To col.Count
        rtn(i) = col(i)
    Next i
    StringOfUniques = Join(rtn, ",")
End Function

一些示例:

?StringOfUniques("a,b,c")
a,b,c
?StringOfUniques("a,a,b,b,c,c")
a,b,c
?StringOfUniques("pineapple,apple")
pineapple,apple

此方法构建&填充集合对象并依赖于以下要求:与集合中的每个项目相关联的密钥必须是唯一的(因此,使用On Error Resume Next来考虑迭代,该迭代试图添加一个键已经出现在集合中的项目(。

这种捕获预期错误的方法可能不是最优雅的解决方案,而是比不断迭代的数组更有效地测试项目是否已经存在。

最新更新