Вы можете использовать словарь для удаления дубликатов:
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
, потому что словарные статьи создаются лениво. Это означает, что простое обращение к элементу будет создавать его, если оно не существует, или перезаписать его, если это произойдет.
- Вместо того, чтобы вручную строить строку параллельно со словарем, вы можете
Join
использовать функцию Keys
.
Вот пересмотренная версия:
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