Como procurar um valor e retornar vários valores exclusivos para uma única célula - separada por vírgula

0

Estou tentando pesquisar um identificador exclusivo (Número do produto) que é mantido em vários locais de estoque diferentes. Por exemplo:

   __A__     __B__       __C__         
1   Item #   Warehouse   Description
2  ABCD-0001  WHSE 1      Red Label
3  ABCD-0001  WHSE 3      Red Label
4  QRST-0005  WHSE 2      2" Pipe
5  QRST-0005  WHSE 1      2" Pipe
6  LMNO-0002  WHSE 4      6" Pipe
7  LMNO-0002  WHSE 2      6" Pipe

E quero que minha fórmula de pesquisa liste meus resultados como tal:

    __A__       __B__              __C__ 
1    ITEM      WAREHOUSE          Description
2  ABCD-0001   WHSE 1, WHSE 3      RED LABEL
3  QRST-0005   WHSE 2, WHSE 1      2" Pipe
4  LMNO-0002   WHSE 4, WHSE 2      6" Pipe

Todas as funções que tenho visto (INDEX-MATCH, VLOOKUP) só podem listar os resultados verticalmente em diferentes células. Eu gostaria de listar os armazéns na mesma célula e separados por uma vírgula.

Eu tentei criar uma função definida pelo usuário no VBA que vi em outro post neste site. No entanto, continuei a receber um erro de #VALUE. Minha opinião é que é devido às letras no meu exemplo, onde o que eu vi continha apenas números.

Todas e quaisquer sugestões serão apreciadas.

A função que usei inicialmente foi encontrada no User BryanC. Parecia 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 

É muito bom que eu tenha a função escrita corretamente no VBA e, em seguida, não estou fazendo a fórmula correta. Para isso, o usuário sugeriu = mylookup (A1: A7, B2)

    
por KjN 25.08.2015 / 21:07

2 respostas

0

Aqui está uma maneira simples, embora não elegante, de fazê-lo. Use a próxima coluna para criar as listas do warehouse:

AfórmulanacélulaD2é:

=IF(A2=A1,D1&", "&B2,B2)

Copie a coluna conforme necessário. Ele verifica se o Item # é o mesmo que o registro anterior. Se for, concatena o armazém à lista. Caso contrário, inicia uma nova lista.

Use a próxima coluna para criar um filtro que identifique o último registro para cada número de item:

AfórmulanacélulaE2é:

=IF(A2=A3,"",1)

Copie isso na coluna. Isso verifica se o número do item atual corresponde ao próximo. Se assim for, deixa a célula em branco. Se não corresponder, significa que é o último registro do Item # e tem a lista completa do warehouse na coluna D, portanto, o filtro recebe um 1 .

Agora você filtra E para mostrar somente os registros que contêm a lista completa. A partir daí, você tem a base para criar a saída que deseja copiando, fazendo referência a células ou visualizando no local. Para visualizar no lugar, mova a coluna D para a esquerda e oculte a coluna B. Aqui está o resultado depois de também ocultar a coluna E:

    
por 26.08.2015 / 00:21
0

O seu mylookup está bem, você tem que usá-lo como =mylookup(A1:B7,B2) .

o inputrange deve cobrir as colunas A e B . Você está tentando apenas com a coluna A.

    
por 26.08.2015 / 11:17