Agrupando rótulos e concatenando seus valores de texto (como uma tabela dinâmica)

22

Eu tenho uma planilha com dados como este:

Produto | Atributo
---------- + ----------
Produto A | Ciano
Produto B Ciano
Produto C | Ciano
Produto A | Magenta
Produto C | Magenta
Produto B Amarelo
Produto C | Amarelo
Produto A | Preto
Produto B Preto

O que eu gostaria de fazer agrupar tudo pela coluna A e fazer com que a coluna B seja uma lista de valores delimitada por vírgula que compartilham a coluna A em comum, assim:

Produto | Atributo
---------- + --------------------------
Produto A | Ciano, Magenta, Preto
Produto B Ciano, Amarelo, Preto
Produto C | Ciano, Magenta, Amarelo, Preto

Infelizmente, as tabelas dinâmicas apenas sabem como trabalhar com valores numéricos, e o mais longe possível é contar o número de vezes que a coluna A ocorre.

Consegui fazer isso importando os dados para um banco de dados MySQL e usando a GROUP_CONCAT(Attribute)função do MySQL em uma consulta com uma GROUP BY Productcláusula, mas depois de bater minha cabeça na minha mesa repetidamente enquanto tentava descobrir uma solução do Excel.

Para referência futura, isso é possível no Excel sem macros? Se é ou não, como alguém faria isso?

p0lar_bear
fonte

Respostas:

31
   |     A     |     B
---+-----------+-----------
 1 |  PRODUCT  | ATTRIBUTE
 2 | Product A | Cyan
 3 | Product B | Cyan
 4 | Product C | Cyan
 5 | Product A | Magenta
 6 | Product C | Magenta
 7 | Product B | Yellow
 8 | Product C | Yellow
 9 | Product A | Black
10 | Product B | Black

Supondo que a linha 1: 1 seja a linha do cabeçalho.

  1. Classifique pela coluna A para agrupar por produto

  2. Prepare os dados em formato separado por vírgula na coluna C digitando em C2 a seguinte fórmula e copie para C3: C10.

    =IF(A2<>A1, B2, C1 & "," & B2)
    
  3. Identifique linhas úteis entrando em D2 =A2<>A3e copie para D3: D10.

  4. Copie a coluna C: D e cole especial como valor ( AltE- S- V- Enter). Agora você receberá:

    Product A    Cyan       Cyan                   FALSE
    Product A    Magenta    Cyan,Magenta           FALSE
    Product A    Black      Cyan,Magenta,Black     TRUE
    Product B    Cyan       Cyan                   FALSE
    Product B    Yellow     Cyan,Yellow            FALSE
    Product B    Black      Cyan,Yellow,Black      TRUE
    Product C    Cyan       Cyan                   FALSE
    Product C    Magenta    Cyan,Magenta           FALSE
    Product C    Yellow     Cyan,Magenta,Yellow    TRUE
    
  5. Remova as linhas inúteis filtrando a FALSEcoluna D com o AutoFiltro e exclua essas linhas.

  6. Concluir . A coluna A e C é o que você precisa.

Wilson
fonte
1
Isso está usando sua imaginação! Parabéns!
Jorgebg 16/10/12
Enquanto isso funciona, os tempos mudaram desde 2012. Procure abaixo uma nova resposta que use o suplemento PowerQuery (que está embutido no Excel 2016). Não poderia ser mais fácil. Bem, talvez conversando com o computador e pedindo para "agrupar meus dados!" Talvez daqui a 6 anos.
ripvlan #
11

Eu sei que é um post antigo, mas eu tive esse desafio hoje. Eu usei o suplemento PowerQuery da Microsoft (NOTA: ele está embutido no Excel 2016 por padrão).

  1. Selecione sua mesa
  2. Na guia CONSULTA DE ENERGIA (ou DADOS em 2016), selecione "Da tabela"
  3. Clique na coluna "Produto"
  4. na guia Transformar, selecione "Agrupar por"
  5. Na guia Exibir, verifique se "Barra de fórmulas" está marcada
  6. Mude a fórmula

    A PARTIR DE:

    = Table.Group(#"Changed Type", {"Product"}, {{"Count", each Table.RowCount(_), type number}})
    

    PARA:

    = Table.Group(#"Changed Type", {"Product"}, {{"Attributes", each Text.Combine([Attribute], ", "), type text}})
    

    Clique aqui para a imagem que descreve as etapas acima

A etapa 6 é aproveitar as fórmulas do Power Query (M) para executar manipulações de dados não expostas pelas operações básicas fornecidas na interface do usuário. A Microsoft tem uma referência completa disponível online para todas as funções avançadas disponíveis no Power Query.

Matt Poland
fonte
Solução muito elegante, provavelmente a melhor de todas.
asdmin 3/17/17
@matt poland, gostaria de saber se você também sabe como remover valores duplicados ao longo das linhas usando esse truque incrível?
Lana B
Na ETAPA 1 (após selecionar a tabela), você poderá acessar a guia Dados na faixa de opções e clicar em "Remover duplicatas".
Matt Poland
Há outra opção no Power Query, se você não deseja alterar sua tabela original. Após o PASSO 2, você pode manter pressionada a tecla CTRL e clicar nas duas colunas para selecionar as duas. Em seguida, clique com o botão direito do mouse em uma das colunas e selecione "Remover duplicatas". Em seguida, prossiga para o PASSO 3.
Matt Poland
Obrigado! Esta é a melhor resposta. Para aqueles que usam o Excel 2016, o PowerQuery é incorporado. Basta pressionar a guia Dados e, em seguida, "Da tabela / intervalo" na seção "Obter e transformar dados". O Power Query Editor será aberto, pressione a guia View e ative a barra de fórmulas. O restante das instruções funciona como está.
ripvlan #
3

Aqui estão algumas abordagens, ambas "não macro" ...

  1. Com um pequeno conjunto de dados, após classificá-lo primeiro por produto (semelhante ao GROUP BY Product), você pode primeiro copiar a coluna "Produto", colá-la em outro local e remover duplicatas. Em seguida, copie os "Atributos" de cada produto e "cole TRANSPOSE especial" ao lado de cada Produto. Em seguida, concatene uma vírgula com cada um dos seus atributos transpostos em uma coluna de resultados finais. É certo que todo esse "copiar / colar especial / transpor" envelheceria rapidamente se você tiver uma longa lista de produtos.

  2. Se você tiver muitos dados, usando algumas fórmulas, poderá chegar ao resultado final, como mostrado abaixo. As fórmulas em F2, G2, H2, I2 e N2 são indicadas pelas setas azuis. Copie-os para as linhas abaixo, conforme necessário. Observe que J2: L2 usa a mesma fórmula que I2. Além disso, a fórmula F2 refere-se a um intervalo nomeado "Produtos" que abrange o intervalo A: A.

insira a descrição da imagem aqui

F106dart
fonte
Essas são boas soluções, embora apenas se o conjunto de dados for pequeno, como você diz. Obrigado!
P0lar_bear