你可以用字典来删除重复项:
Sub Test()
Dim EmailAddresses As String
EmailAddresses = "[email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]"
EmailAddresses = RemoveDuplicates(EmailAddresses)
Debug.Print EmailAddresses
End Sub
Public Function RemoveDuplicates(sTo As String) As String
Dim dict As Object
Dim vEmails As Variant
Dim x As Long
Dim sTemp As String
vEmails = Split(Replace(sTo, " ", ""), ";")
If UBound(vEmails) > 0 Then
'Remove duplicates.
Set dict = CreateObject("Scripting.Dictionary")
For x = LBound(vEmails) To UBound(vEmails)
If Not dict.exists(vEmails(x)) Then
dict.Add vEmails(x), 1
sTemp = sTemp & vEmails(x) & ";"
End If
Next x
sTemp = Left(sTemp, Len(sTemp) - 1) 'Remove the final ;
RemoveDuplicates = sTemp
Else
'There's only 1 address.
RemoveDuplicates = sTo
End If
End Function
以上实际上可以简化一些方法也一样,如果这是你的偏好。
- 对于这样简单的去重,不需要使用。
Exists
方法或.Add
方法,因为字典项目是懒惰创建的。这意味着如果简单地引用一个项目,它将创建它,如果它不存在,或者覆盖它,如果它。
- 与字典并行手动构建字符串,您可以在字典的
Keys
上使用Join
函数。
这里的修订版:
Public Function RemoveDuplicates2(sTo As String) As String
Dim dict As Object
Dim vEmails As Variant
Dim x As Long
vEmails = Split(Replace(sTo, " ", ""), ";")
Set dict = CreateObject("Scripting.Dictionary")
For x = LBound(vEmails) To UBound(vEmails)
dict(vEmails(x)) = dict(vEmails(x)) 'Keep track of how many occurrences, in case you want to do something with it later
Next
RemoveDuplicates = Join(dict.Keys(), "; ")
End Function
什么数据类型是 “要” 变量?它是一个数组吗?或串联的字符串? – StormsEdge
将列表转储到字典中。这确实是为了这样的事情。 –
@StormsEdge我编辑了我的帖子。现在你可以看到变量是如何定义的。 – yuro