Você pode usar o seguinte código do VBA para remover duplicatas de uma lista delimitada.
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
Existem duas maneiras de usar esse código para obter o que você deseja.
-
Se você quiser remover as duplicatas no lugar, ou seja, se quiser limpar os dados que você possui e excluir as duplicatas para sempre, execute o ZapDuplicatesInPlace
sub. Ele solicitará que você selecione um intervalo que você deseja processar. Cada célula no intervalo será despojada de duplicatas.
-
Se você preferir usar funções de planilha para deixar seus dados originais intactos, poderá usar a função RemoveDuplicates
em uma fórmula. Por exemplo, se você tiver Smith, Miller, Patty, Smith, Patty, Miller
em A1, poderá usar a fórmula abaixo em outra célula para retornar a lista menos as duplicatas.
=RemoveDuplicates(A1,", ")
Para obter instruções sobre como usar o VBA em sua pasta de trabalho, consulte esta postagem .