Remove entradas duplicadas em uma célula

2

Eu tenho dados importados de um banco de dados de literatura (formato .txt) para o Excel. Infelizmente, na maioria dos casos, os autores estão listados em dobro em uma célula, por exemplo:

Smith, Miller, Patty, Smith, Patty, Miller

Como você pode ver, a ordem dos nomes também muda. Eu gostaria de remover as segundas repetições para Smith, Miller, Patty

Alguém tem um atalho super legal como fazer isso rapidamente? Atualmente, estou passando por cada célula manualmente. (Eu sei, corrigir isso já na etapa de banco de dados de literatura seria melhor. Infelizmente, isso não é uma opção agora ...).

    
por Simone Lerch 11.09.2013 / 17:28

3 respostas

2

A forma como o Excel lida com funcionalidades divididas e funções únicas ou distintas é um pouco difícil: a divisão é feita via "texto para colunas", como no MS Word, e exclusivo / distinto é feito por filtragem avançada "valores únicos" em um nova coluna.

Você pode tentar corrigir isso no Planilhas Google com a seguinte fórmula:

Cell A1: Smith, Miller, Patty, Smith, Patty, Miller

Cell A2: =join(", ",unique(transpose(split(A1,", "))))

Result: Smith, Miller, Patty

Folha do Google: link

SPLIT nas vírgulas para criar um valor separado em cada célula adjacente, distribuído por várias colunas. TRANSPOSE converterá isso de uma linha de muitos valores para uma única coluna de muitos valores. Eu acho que é necessário que o UNIQUE funcione. Finalmente, JOIN pega os valores únicos (desduplicados) nessa matriz e cria uma nova sequência separada por vírgula deles.

    
por 19.06.2014 / 00:43
0

Seus dados importados provavelmente têm delimitadores incorretos, como a vírgula entre os nomes. Você poderia talvez consertar isso criando uma nova coluna e aparar. Faça com que o Excel procure pela 3ª vírgula e, em seguida, elimine todos os caracteres depois dela.

    
por 16.09.2013 / 13:40
0

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.

  1. 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.

  2. 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 .

    
por 25.11.2015 / 21:21