Transforma o layout da tabela horizontal em tabela vertical

0

A seguinte planilha do excel deve ser reorganizada

de

ID  Name1  Name2  Name3

1   Alf    Bert   Fritz

2   Curt

3   Otto   Mike

4   Sue    Zack 

para

ID  Name

1   Alf

1   Bert

1   Fritz

2   Curt

3   Otto

3   Mike

4   Sue

4   Zack

Não tenho o termo de pesquisa correto, acho que é bastante comum, mas não consigo descrevê-lo corretamente.

    
por Michael 03.12.2013 / 14:57

2 respostas

0

Tente este código. É auto-explicativo em virtude de trabalhar passo a passo. Seus dados de entrada começam em A1 e sua saída começa em A8. Isso pode ser alterado.

O código mais curto é obviamente possível, e eu acho que uma fórmula de matriz também pode ser colocada em conjunto.

Sub single_col()
    Dim icell As Integer
    Dim irow As Integer, icol As Integer
    Dim nrows As Integer, ncols As Integer
    Dim rng_all As Range, rng_curr As Range, rng_trg As Range
    Set rng_all = Range("A2:D5")
    Set rng_trg = Range("A8")
    nrows = rng_all.Rows.Count
    icell = 0
    For irow = 1 To nrows
      Set rng_curr = rng_all.Rows(irow)
      ncols = WorksheetFunction.CountA(rng_curr)
      For icol = 2 To ncols
        icell = icell + 1
        Dim name As String
        name = rng_curr.Cells(1, icol).Text
        rng_trg.Value = rng_curr.Cells(1, 1).Text
        rng_trg.Offset(0, 1).Value = name
        Set rng_trg = rng_trg.Offset(1, 0)
      Next icol
    Next irow
End Sub

PS: o código acima já inclui a modificação sugerida no comentário.

    
por 03.12.2013 / 16:00
0

Você tem um layout de tabela dinâmica que deseja "desvincular". Este artigo de Jon Walkenbach mostra o que você pode fazer com apenas algumas teclas e nenhum código VBA é necessário. / p>

Para sua situação específica, aqui está o que eu faria.

1. Abra o menu da tabela dinâmica "antiga" usando Alt + D, P. Você terá uma caixa de diálogo como a mostrada abaixo. Escolha a opção "Vários intervalos de consolidação" e clique em "Avançar".

2.Nopassoseguinte,escolha"Vou criar os campos da página"; clique em "Avançar".

3.Destaqueoseuintervalodecélulasparaquesejadefinidonapartesuperiordacaixadediálogoe,emseguida,cliquenobotão"Adicionar" para copiar esse intervalo para a lista "Todos os intervalos". Clique em "Próximo".

4.Escolhaumacélulalongedosseusdados.AquivocêvêqueeuescolhiF3namesmafolha.(Vocêpodeescolherumafolhadiferente,sequiser.)Cliqueem"Concluir".

5.Vocêteráumatabeladinâmicacomoesta.Nacaixadediálogo,desmarqueascaixasdeseleção"Linha" e "Coluna".

6.Issolhedáumatabeladinâmicadeumacélula.

7.Você então clicará duas vezes na célula e, em uma nova planilha, receberá seus dados "não dinamizados" como uma nova tabela:

Com os dados desta tabela, você pode agora filtrar a coluna C para mostrar os não-brancos, e você pode deletar a coluna B, e você terá o layout desejado.

    
por 06.12.2013 / 18:59