Combine várias linhas com uma (muitos muitos relacionamentos)

3

Alguém poderia me ajudar a escrever uma fórmula do Excel para fazer o seguinte? Eu estou tentando mesclar códigos de produto para um cliente de um extrato de arquivo simples. Cada cliente pode ter vários produtos e vice-versa (esse é um relacionamento muitos: muitos). O que preciso é gerar uma planilha separada com uma lista simples de clientes e produtos associados de maneira separada por vírgulas. Veja a imagem para entender o que estou tentando fazer:

    
por Lily Blunt 21.03.2016 / 07:23

2 respostas

1

Isso é muito mais fácil se você quiser criar algumas "colunas auxiliares". É mais simples se você colocá-los na Folha 1 (você pode escondê-los, ou coloque-os à direita (por exemplo, Colunas Y e Z ), se você quiser - ou você pode até colocá-los em outra folha. Eu suponho que estamos usando as colunas Y e Z como colunas auxiliares "Cust ID" e "Product ID" estão nas colunas A e B , respectivamente, e os dados começam na linha 2 (com cabeçalhos na linha 1).

Insira o seguinte valor e fórmulas:

  • Y20
  • Y3=IF(A3=A4, Y2, Y2+1)
  • Z2=IF(A1=A2, Z1 & ", " & B2, B2)

Arraste / encha Y3 e Z2 até o final dos dados. Você deve ter algo assim:

AcolunaYidentificaointervalodelinhasparaumúnicocliente.SeapróximalinhativerumIDdeclientediferentedaquele(istoé,seestaéaúltimalinhaparaestecliente),adicionamos1aovaloranteriordeY(ouseja,alinhaacima).Casocontrário,copieovaloranterior.

ColunaZconstróialistadeprodutosparacadacliente.Sealinhaanteriortiveromesmonúmerodeclientequeeste,issosignificaquealinhaatualemnãoaprimeiralinhadessecliente,entãopegamosovalordeZdalinhaanterioreanexeoprodutodestafileira.Casocontrário,estaéaprimeiralinhadestecliente,entãosimplesmentepegamosoprodutodessafileira.(Asduasfrasesanteriorespodemfazermaissentidosevocêaslernaordeminversa.)

Agora,váparaSheet2.Omesmodeantes;Euassumireique"Cust ID" e "Produtos" estão nas colunas A e B , respectivamente e os dados começam na linha 2 (com cabeçalhos na linha 1). Digite estas fórmulas:

  • A2=INDEX(Sheet1!A:A, MATCH(ROW()-1, Sheet1!Y:Y, 0))
  • B2=INDEX(Sheet1!Z:Z, MATCH(ROW()-1, Sheet1!Y:Y, 0))

e arraste / preencha.

Observe que as duas fórmulas têm uma expressão em comum: %código%. Que encontra a primeira linha na Folha1 em que o valor MATCH(ROW()-1, Sheet1!Y:Y, 0) é o número da linha atual (Folha2), menos 1. Assim, Sheet2 Row 2 procura 1, Sheet2 Row 3 procura 2, etc. Lembre-se, os valores de Y sobem um na última linha para um cliente. Assim, a fórmula na Coluna Sheet1!Y extrai o valor A para essa linha, qual é o próximo ID exclusivo do cliente e a fórmula na coluna Sheet1!A extrai o valor B para essa linha, que é a lista de produtos para esse cliente:

    
por 21.03.2016 / 10:15
0

Levou alguns ajustes, mas depois de um pouco de tentativa e erro, isso funcionou em uma mesclagem de duas planilhas idênticas contendo "alguns" dados diferentes. Cada um com mais de 15.000 linhas e 132 colunas! Verificações aleatórias são boas! Isso me poupou uma tonelada de tempo, obrigado!

    
por 03.04.2016 / 19:52