Transforme uma tabela de 2 colunas em várias colunas com base no valor da linha

0

Eu tenho uma tabela de 2 colunas com linhas como:

1 Brand1
1 Brand2
2 Brand3
2 Brand4
2 Brand2
2 Brand5
3 Brand5
3 Brand2
4 Brand3

Gostaria de transformar cada valor da primeira coluna em um cabeçalho de coluna e, abaixo, ter a lista de valores da segunda coluna:

1        2        3        4
Brand1   Brand3   ...      ...
Brand2   Brand4   ...
         Brand2
         Brand5

Eu não posso fazê-lo através de uma tabela dinâmica, pois ele deve ter um valor numérico para calcular (somar, contar, ...) e eu não encontrei nenhuma ajuda, já que na verdade é bem difícil de explicar e para cuidar de uma solução no Google (escolhendo os termos certos).

Eu sei que existem soluções (em VBA) para fazer o oposto, mas não consegui encontrar uma solução para o meu problema.

Eu tenho visto alguns termos específicos, como "fold" ou "unfold", mas não tenho certeza qual deles está correto nem se é apropriado aqui.

    
por ant1j 18.02.2014 / 12:16

1 resposta

0

Por favor, note que você terá que atualizar o código abaixo com base no número de linhas que você está usando. no exemplo abaixo, usei 10.

Sub Button1_Click()

    Dim numberOfRows As Integer
    numberOfRows = 10 ' UPDATE THIS FOR YOUR NUMBER OF ROWS

    Dim i As Integer
    i = 1
    Dim previousValue As String
    Dim currentColumn As Integer
    currentColumn = 97
    For rowNumber = 1 To numberOfRows
        Dim currentValueOfA As String
        Dim currentValueOfB As String
        currentValueOfA = Worksheets("Sheet1").Range("A" & rowNumber).Value
        currentValueOfB = Worksheets("Sheet1").Range("B" & rowNumber).Value

        If (previousValue = "") Then
            previousValue = currentValueOfA
        End If

        If (previousValue = currentValueOfA) Then

            If (Worksheets("Sheet2").Range(Chr$(currentColumn) & "1").Value = "") Then
                Worksheets("Sheet2").Range(Chr$(currentColumn) & "1").Value = currentValueOfA
            End If

            Worksheets("Sheet2").Range(Chr$(currentColumn) & i + 1).Value = currentValueOfB

        Else
            currentColumn = currentColumn + 1
            previousValue = currentValueOfA
            i = 1

            If (Worksheets("Sheet2").Range(Chr$(currentColumn) & "1").Value = "") Then
                Worksheets("Sheet2").Range(Chr$(currentColumn) & "1").Value = currentValueOfA
            End If

            Worksheets("Sheet2").Range(Chr$(currentColumn) & i + 1).Value = currentValueOfB
        End If

        i = i + 1
    Next

End Sub

Esta é minha planilha1

EéassimqueficanaPlanilha2

Pode haver algumas falhas (dependendo de quantas linhas você tem), mas com base no exemplo que você deu, funciona muito bem.

    
por 18.02.2014 / 12:42