String 删除字符串函数中的重复文本

String 删除字符串函数中的重复文本,string,function,ms-access,duplicates,vba,String,Function,Ms Access,Duplicates,Vba,我有一个函数可以删除Access表中单个列中的重复文本字符串: 原始值:持卡人、对账人、对账人、持卡人、批准人 所需输出:持卡人、对账人、批准人 我有下面的函数来实现这一点,但是如果只有一个值要返回(例如“持卡人”),它会留下一个挂起的逗号 应调整哪些部分以反映这种变化 谢谢。使用instr测试该项是否已经存在于字符串中,对于包含其他字符串的字符串(例如,如果输入“菠萝,苹果”,您的方法将返回“菠萝”) 提供一种可供选择的方法,考虑以下函数: Function StringOfUniques(s

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

原始值:持卡人、对账人、对账人、持卡人、批准人

所需输出:持卡人、对账人、批准人

我有下面的函数来实现这一点,但是如果只有一个值要返回(例如“持卡人”),它会留下一个挂起的逗号

应调整哪些部分以反映这种变化


谢谢。

使用
instr
测试该项是否已经存在于字符串中,对于包含其他字符串的字符串(例如,如果输入
“菠萝,苹果”
,您的方法将返回
“菠萝”

提供一种可供选择的方法,考虑以下函数:

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
一些例子:

此方法构造并填充集合对象,并依赖于与集合中的每个项相关联的键必须唯一的要求(因此,在错误恢复下一步时使用
,以说明尝试添加其键已出现在集合中的项的迭代)


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

将数组的成员字符串作为键添加到
脚本.Dictionary
对象

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

公共函数stringOfUniques(inputString作为字符串)作为字符串
Dim xVal作为变体
用细线镶边的
作为对象的Dim-dct
设置dct=CreateObject(“Scripting.Dictionary”)
对于拆分中的每个xVal(inputString,“,”)
strTrimmed=微调(xVal)
如果Len(strTrimmed)>0且不存在dct(strTrimmed),则
dct.Add键:=strTrimmed,项:=Null
如果结束
下一个
stringOfUniques=Join(dct.Keys,“,”)
端函数

只需抓取数组的最后一个元素,并将其值替换为一个新字符串,替换逗号即可。因此inArray(inArray.Length-1)=inArray(inArray.Length-1)。替换(“,”,“”)该行代码是否会位于当前inArray=Split(inputString,“,”)行的下方?或者应该修改那一行?将那一行新代码放在inArray=Split(inputString,“,”)下面不起作用。我遇到一个编译错误:限定符无效。请将这两行代码添加到stringOfUniques=s Dim lastComma的最后一行之前,作为Integer=s.LastIndexOf(“,”)s=s.Substring(0,lastComma)这将找到返回字符串中最后出现的逗号字符,并获取s的子字符串直到最后一个逗号,从而排除它,请参见下面的答案。@Katie,您能给出一个您认为在输出中仍返回重复输入的示例吗?@Katie可能是因为您的分隔符有空格?尝试将我的代码中的
,“
更改为
,”
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