Como pesquisar um valor e retornar vários valores exclusivos (remover duplicatas) para uma única célula - separada por vírgulas

0

Estou tentando obter um valor (id único) da coluna AC, fazer uma pesquisa na coluna (B) e retornar (ou seja, concatenar) os vários valores exclusivos de uma coluna adjacente (C) para uma única célula na coluna AD. Eu só quero retornar os valores exclusivos, eliminando as duplicatas e ter todos os resultados retornados em uma única célula, separados por vírgulas. Por favor, veja o exemplo abaixo. Existem aproximadamente 800 IDs exclusivos para pesquisa e aproximadamente 5000 linhas de dados. Estou aberto a uma fórmula, matriz ou solução VBA. Obrigado.

    Source Data:
    Column B     Column C   ....  Column AC (unique ID)
    DEF          111               ABC
    DEF          222               DEF
    DEF          111               GHI
    ABC          444               JKL
    DEF          333
    DEF          111
    ABC          444
    ABC          555
    JKL          666
    JKL          666
    GHI          777
    GHI          888
    ABC          555

   Desired Output:
    Column B     Column C   ....  Column AC  Column AD (unique values comma separated)
    DEF          111               ABC       444,555
    DEF          222               DEF       111,222,333
    DEF          111               GHI       777,888
    DEF          333               JKL       666,999
    DEF          111
    ABC          444
    ABC          555
    JKL          666
    JKL          666
    JKL          999
    GHI          777
    GHI          888
    ABC          555
    
por Qorn 24.03.2015 / 19:42

1 resposta

0

Eu usaria uma UDF do Excel (função definida pelo usuário) para isso.

Configure assim:

Public Function mylookup(inputrange As Range, match As Range) As String
Dim arr() As Variant
Dim d As Object
Dim result As String
Dim i As Integer
Dim v As Variant
Set d = CreateObject("Scripting.Dictionary")
arr() = inputrange.Value

For i = 1 To UBound(arr)
    If arr(i, 1) = match Then
        d(arr(i, 2)) = 1
    End If
Next i
For Each v In d.Keys()
        result = result & v & ","
Next v
    result = Left(result, Len(result) - 1)

mylookup = result

End Function

De lá, use-o como uma fórmula. O primeiro argumento é a lista completa de valores e o segundo argumento é o valor específico que você deseja fazer uma pesquisa.

=mylookup(B1:B90,AC1)

EDITAR: Eu perdi um dos seus requisitos originais, para filtrar valores duplicados. Eu adicionei um objeto de dicionário para fazer isso.

    
por 24.03.2015 / 23:05