Como "dinamizar" ou "reverter pivô" no Excel?

66

Eu tenho dados parecidos com este:

Id | Loc1 | Loc2 | Loc3 | Loc4
---+------+------+------+-----
1  | NY   | CA   | TX   | IL
2  | WA   | OR   | NH   | RI

E eu quero convertê-lo para isso:

Id | LocNum | Loc
---+--------+----
1  |   1    | NY
1  |   2    | CA
1  |   3    | TX
1  |   4    | IL
2  |   1    | WA
2  |   2    | OR
2  |   3    | NH
2  |   4    | RI

Qual é a maneira mais fácil de fazer isso no Excel 2007?

devuxer
fonte
11
Encontrei a resposta: stackoverflow.com/questions/32115219/…
Quandary

Respostas:

69

Você pode fazer isso com uma tabela dinâmica.

  1. Crie uma "Tabela dinâmica de várias faixas de consolidação". (Somente no Assistente de tabela dinâmica. Chamada com ALT+ D, Pno Excel 2007)
  2. Selecione "Vou criar meus próprios campos de página".
  3. Selecione seus dados.
  4. Clique duas vezes no valor total geral - aquele no cruzamento da Linha Grande e da Coluna Grande , todo o caminho no canto inferior direito da sua tabela dinâmica.

Você deverá ver uma nova planilha contendo todos os dados em sua tabela dinâmica, transpostos da maneira que procura.

As tecnologias Datapig fornecem instruções passo a passo que são realmente mais complicadas do que você precisa - o exemplo dele transpõe apenas parte do conjunto de dados e usa a técnica de pivô combinada com TextToColumns . Mas tem muitas fotos.

Observe que uma tabela dinâmica agrupará os dados. Se você quiser desagrupar, a única maneira de fazer isso é copiar a tabela dinâmica e "colar especial" como valores. Você pode preencher os espaços em branco com uma técnica como esta: http://www.contextures.com/xlDataEntry02.html

DaveParillo
fonte
Obrigado pela sua resposta, mas não tenho muita certeza do que você está dizendo aqui. Para o exemplo da minha pergunta, o que eu usaria para rótulos de linha, rótulos de coluna, valores e filtro de relatório?
Devuxer 03/12/2009
Se eu colocar o ID nos Rótulos das Linhas e o Loc1 no Loc4 nos Rótulos das Colunas, clique na célula inferior direita (a interseção dos Totais Gerais), ele criará uma nova planilha com uma tabela, mas não é o que eu quero. É basicamente apenas uma cópia da tabela dinâmica regular.
Devuxer 03/12/2009
Sinto muito, deixei de fora um dado crítico. A tabela dinâmica deve ser uma tabela dinâmica do tipo 'múltiplo intervalo de consolidação', mesmo que nesse caso você não tenha nada para consolidar.
DaveParillo
4
Ah, tudo bem, procurei na ajuda e encontrei uma maneira de obter a porta dos fundos para obter o antigo Assistente de Tabela Dinâmica no Excel 2007 (você precisa pressionar ALT + D + P). Agora eu sou capaz de seguir seus passos, e parece funcionar. Obrigado pela ajuda!
Devuxer 07/12/2009
11
Veja como exatamente: stackoverflow.com/questions/32115219/…
Quandary
7

Se seus dados não forem uma Tabela Dinâmica do Excel, mas apenas dados, convém "desivocitá-los" com algum código VBA simples. O código depende de dois intervalos nomeados, Origem e Destino. Origem são os dados que você deseja desarticular (excluindo os cabeçalhos de coluna / linha, por exemplo, NY-RI na amostra) e Target é a primeira célula em que você deseja colocar o resultado.

Sub unPivot()
Dim oTarget As Range
Dim oSource As Range
Dim oCell As Range

Set oSource = Names("Source").RefersToRange
Set oTarget = Names("Target").RefersToRange

For Each oCell In oSource
    If oCell.Value <> "" Then
        oTarget.Activate
      ' get the column header
        oTarget.Value = oCell.Offset(-(oCell.Row - oSource.Row + 1), 0).Text 
      ' get the row header
         oTarget.Offset(0, 1).Value = oCell.Offset(0, _
           -(oCell.Column - oSource.Column + 1)).Text 
      ' get the value
        oTarget.Offset(0, 2).Value = oCell.Text 
      ' move the target pointer to the next row
        Set oTarget = oTarget.Offset(1, 0) 
    End If
Next
Beep
End Sub
TJMelrose
fonte
11
Obrigado por isso. Funciona como exceção e me faz economizar muito tempo.
usar o seguinte
Obrigado!! isso é apenas mágica! muito melhor do que jigiry-pokery com unpivoting relatórios que nunca trabalharam para mim
TRAILMAX
11
Parece ótimo, mas, da melhor maneira que posso dizer, funcionará apenas para uma tabela que possui apenas um cabeçalho de linha. Se a tabela no exemplo tiver vários cabeçalhos de linha, digamos que tenha um "SubId" além do campo Id, isso não funcionará. Existe uma maneira fácil de modificá-lo para que funcione nessa situação?
Chris Stocking
4

Há uma solução bastante interessante no excel 2010, só é necessário jogar um pouco com a tabela dinâmica.

Crie uma tabela dinâmica a partir dos seus dados com estas configurações:

  • sem subtotais, sem totais gerais
  • layout do relatório: formulário tabular, repita todos os rótulos dos itens
  • adicione todas as colunas necessárias, mantenha as colunas que deseja transformar à direita
  • para cada coluna que você deseja transformar: abra as configurações do campo - na guia Layout e impressão: selecione “Mostrar etiquetas do item no formulário de estrutura de tópicos” e marque as duas caixas de seleção abaixo dela
  • copie sua tabela para um local separado (apenas valores)
  • se você tiver células vazias nos dados originais, filtre os valores vazios na coluna mais à direita e exclua essas linhas (não filtre na tabela dinâmica, pois ela não funcionará conforme o necessário!)
Máté Juhász
fonte
11
Essa é certamente a melhor resposta se você estiver em 2010 e acima, e não for óbvio na interface. Ótima descoberta - infelizmente eu tenho apenas uma votação positiva!
jkf
3

O melhor que eu vim até agora é o seguinte:

Id   LocNum  Loc
---------------------------------
1    1       =INDEX(Data,A6,B6)
1    2       =INDEX(Data,A7,B7)
1    3       =INDEX(Data,A8,B8)
1    4       =INDEX(Data,A9,B9)
2    1       =INDEX(Data,A10,B10)
2    2       =INDEX(Data,A11,B11)
2    3       =INDEX(Data,A12,B12)
2    4       =INDEX(Data,A13,B13)

Isso funciona, mas eu tenho que gerar os IDs e LocNum's manualmente. Se houver uma solução mais automatizada (além de escrever uma macro), informe-me em uma resposta separada.

devuxer
fonte
2

Se as dimensões dos seus dados forem as da amostra fornecida na sua pergunta, o seguinte conjunto de fórmulas usando OFFSET deverá fornecer o resultado necessário:

Assumindo

1 | Ny CA TX IL

2 WA OU NH RI

estão no intervalo A2: E3 e digite

= DESLOCAMENTO ($ A $ 2, PISO ((ROW (A2) -ROW ($ A $ 2)) / 4,1), 0)

em F2, digamos, e

= MOD (ROW (A2) -ROW ($ A $ 2), 4) +1

no G2, digamos, e

= OFFSET ($ B $ 2, PISO ((ROW (B2) -ROW ($ B $ 2)) / 4,1), MOD (ROW (A2) -ROW ($ A $ 2), 4))

em H2, digamos.

Em seguida, copie essas fórmulas o quanto for necessário.

Esta é a solução de fórmula mais fácil, pura e integrada em que consigo pensar.

Aaa
fonte
1

Você parece ter recebido a coluna "loc" (evidenciada pela sua primeira resposta) e agora precisa de ajuda para obter as outras duas colunas.

Sua primeira opção é simplesmente digitar as primeiras (digamos, 12) linhas nessas colunas e arrastar para baixo - acho que o Excel faz a coisa certa neste caso (não tenho excel neste computador para testá-lo com certeza).

Se isso não funcionar, ou se você quiser algo mais programador, tente usar a função row (). Algo como "= Piso (linha () / 4)" para a coluna ID e "= mod (linha (), 4) +1" para a coluna LocNum).


fonte
1

Existe um utilitário de conversão VBA paramétrico para dinamizar ou reverter dados dinâmicos de volta para uma tabela de banco de dados, consulte

http://www.spreadsheet1.com/unpivot-data.html

Petros
fonte
11
Bem-vindo ao Super Usuário! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Peachy
1

Aqui está uma boa ferramenta para remover a dinâmica, normalizar uma tabela dinâmica.

Normalisieren von Pivot Tabellen

Espero que ajude.

L4a-Thompson
fonte
11
Bem-vindo ao SuperUser! Embora a ferramenta que você vinculou ofereça uma solução, esta postagem é útil apenas enquanto o link permanecer ativo. Para garantir que sua postagem continue sendo útil no futuro, edite sua resposta para incluir informações adicionais sobre o produto, incluindo como usá-lo para resolver o problema descrito na pergunta. Obrigado!
precisa saber é o seguinte
1

A resposta @DaveParillo é a melhor resposta para uma única tabela de guias. Eu queria adicionar alguns extras aqui.

Para Várias colunas antes das colunas não dinâmicas

Este método não funciona.

Youtube desvia dados simples como a pergunta

Este é um vídeo do youtube mostrando como fazê-lo de maneira simples. Eu pulei a parte sobre a adição do atalho e usei o atalho @devuxer que está na resposta DaveParillo.

https://www.youtube.com/watch?v=pUXJLzqlEPk

BrinkDaDrink
fonte
3
A substância da sua resposta é um link para um vídeo e o conteúdo não é descrito. Se o link quebrar ou não estiver disponível, sua resposta não terá valor. Inclua as informações essenciais em sua resposta e use o link apenas para atribuição e exploração adicional.
fixer1234
-2

É muito simples que isso. Basta clicar na opção "Transpor" em "Colar especial ..." para obter a transposição que você está solicitando.

C Tyler
fonte
11
Isso não funcionaria.
Zx8754