Вы можете использовать следующий код VBA для удаления дубликатов из списка с разделителями.
Public Function RemoveDuplicates(list As String, delimiter As String) As String
Dim arrSplit As Variant, i As Long, tmpDict As Object, tmpOutput As String
Set tmpDict = CreateObject("Scripting.Dictionary")
arrSplit = Split(list, delimiter)
For i = LBound(arrSplit) To UBound(arrSplit)
If Not tmpDict.Exists(arrSplit(i)) Then
tmpDict.Add arrSplit(i), arrSplit(i)
tmpOutput = tmpOutput & arrSplit(i) & delimiter
End If
Next i
If tmpOutput <> "" Then tmpOutput = Left(tmpOutput, Len(tmpOutput) - Len(delimiter))
RemoveDuplicates = tmpOutput
'housekeeping
Set tmpDict = Nothing
End Function
Sub ZapDuplicatesInPlace()
Dim r As Range, va() As Variant
Set r = Application.InputBox("Select range to remove duplicates cell by cell.", "Remove Duplicates From Lists", , , , , , 8)
va = r.Value
For i = LBound(va, 1) To UBound(va, 1)
For j = LBound(va, 2) To UBound(va, 2)
'This assumes delimiter is comma followed by space.
va(i, j) = RemoveDuplicates(CStr(va(i, j)), ", ")
Next j
Next i
'Print output to sheet
r.Value = va
End Sub
Есть два способа использования этого кода для достижения желаемого.
Если вы хотите удалить дубликаты на месте, т. Е. Если вы хотите очистить имеющиеся у вас данные и удалить дубликаты навсегда, вы можете запустить ZapDuplicatesInPlace
. Он предложит вам выбрать диапазон, который вы хотите обработать. Каждая ячейка в диапазоне будет лишена дубликатов.
Если вы предпочитаете использовать функции листа, чтобы оставить исходные данные нетронутыми, вы можете использовать функцию RemoveDuplicates
в формуле. Например, если у вас есть Smith, Miller, Patty, Smith, Patty, Miller
в А1, вы можете использовать приведенную ниже формулу в другой ячейке, чтобы вернуть список минус дубликаты.
= RemoveDuplicates(A1, ",")
Инструкции по использованию VBA в вашей рабочей книге см. В этом посте.