Excel - valores dinâmicos em uma célula (como valor separado por vírgula)

11

Excel - valores dinâmicos em uma célula (como valor separado por vírgula)

Eu tenho duas colunas de dados:

Fornecedor1 | Produto1
Fornecedor1 | Produto2
Fornecedor1 | Produto4
Fornecedor1 | Produto7
Fornecedor2 | Produto3
Fornecedor2 | Produto5

Desejo 'girar' em torno do Fornecedor e fornecer a lista de produtos em uma única célula, separados por vírgula, por exemplo

Fornecedor1 | Produto1, Produto2, Produto4, Produto7
Fornecedor2 | Produto3, Produto5

Existem cerca de 1000 fornecedores e 0 <produtos <= 10.

Minha solução atual envolve o uso de tabelas dinâmicas, salvando como CSV etc. e é muito confuso. Uma solução não-VBA seria incrível.

Chris
fonte
Você precisa de uma consulta SQL para fazer isso facilmente. Você pode exportar para um banco de dados com alguma descrição?
Rhys Gibson

Respostas:

23

Aqui está uma solução de tabela não dinâmica e sem VBA que usa apenas algumas fórmulas.

  1. Primeiro, usei o "Texto para colunas" para dividir seus dados naquele delimitador "pipe" (a linha vertical) em 2 colunas; uma coluna "Fornecedor" e uma coluna "Produto". Aqueles vão nas colunas A e B, respectivamente. (Aparece na sua postagem que eles são combinados em uma coluna, então eu os divido primeiro. Você não precisará fazer isso.)

  2. Na coluna C, que chamei de coluna "Concatenação", usei essa fórmula, iniciando na célula C2 e copiando todo o caminho: = IF (A2 = A1, C1 & "," & B2, A2 & "|" & B2)

  3. Na coluna D, que eu nomeei como "SupplierChangesAtNextLine?" Usei esta fórmula (começando em D2 e ​​copiando até o fim): = IF (A2 = A3, "", "Changed")

  4. Agora você deve conseguir filtrar na coluna D apenas os valores "alterados".

Boa caçada!

F106dart
fonte
1
C1  C2  C3          C4
a   1   1   
a   2   2,1 
a   3   3,2,1   
a   5   5,3,2,1 
a   3   3,5,3,2,1   New
b   11  11  
b   13  13,11   
b   11  11,13,11    
b   14  14,11,13,11 New
c   22  22  
c   24  24,22       New
f   25  25  
f   11  11,25   
f   10  10,11,25    New
  1. Em col3 (significa C3), use a fórmula = IF (A2 = A1, B2 & "," & C1, B2) iniciando a célula C2 em diante e arraste-a para baixo.
  2. em C4 (significa coluna4), use a fórmula = IF (A2 = A3, "", "alterado") iniciando a célula D2 em diante e arraste-a para baixo.
  3. Filtre em Novo no C4 (significa col4) e você obterá o resultado desejado.
Arghya Tarafdar
fonte
0

Adicione a coluna C como contador *: = COUNTIF (A $ 2: A $ 528, A2)
Adicione D como incremento * = IF (A2 = A1, D1 + 1, 1)
Adicione E para concatenar *: = IF (A1 = A2, E1 & "," & B2, B2)
Adicione F para manter apenas a última concat : = SE (AND (C2 = D2, E4 <> ""), E4, "")
Observe
a célula 2 e puxe para baixo (ou clique duas vezes) no canto direito) para aplicar a fórmula a todas as células da coluna

copie e cole como valores em outra planilha, classifique decrescente por F, exclua o restante

Conete_Cristian
fonte
muito a fazer ... A solução do F106dart é mais elegante.
Ihightower 03/04