TOP

Reorganização de tabelas (Unpivot) em LibreOffice Calc

Descrição

Às vezes, é necessário converter uma tabela cruzada (pivô) em uma tabela plana. Este procedimento é denominado " correção de dados " (unpivot data) . Como resultado de tal " endireitamento "obtemos uma tabela onde todos os dados semelhantes estão em uma coluna.

O programa LibreOffice Calc não possui uma funcionalidade padrão para conversão de tabelas dinâmicas em " plano ", mas você mesmo pode escrever o procedimento correspondente. Vamos ver como fazer isso.



Vejamos a imagem abaixo para entender mais claramente a essência do problema. À esquerda temos uma tabela em forma de matriz (tabela dinâmica), e à direita - uma tabela regular com colunas (tabela plana):

Ao expandir uma tabela, você descompacta o par atributo-valor que é o ponto de intersecção das colunas na tabela matriz e as reorienta nas colunas niveladas na tabela simples:

  • Valor (Values) (azul à esquerda) expanda para uma nova coluna (azul à direita);
  • Atributos (Attributes) (verde à esquerda) também são expandidos em uma nova coluna (verde à direita) e duplicados de acordo com a nova coluna de valores.
  • Código BASIC para o procedimento UnPivotTable

    Abra o menu Tools - Macros - Edit Macros..., selecione Module1 e copie o seguinte texto no módulo:

    Sub UnPivotTable
      ' moonexcel.com.ua 
      Dim oBook        As Object
      Dim oActiveSheet As Object
      Dim oSelRange    As Object
      Dim oNewSheet    As Object
      
      Dim i                  As Long
      Dim iTopLabelRowCount  As Integer
      Dim iSideLabelColCount As Integer       
      
      oBook        = ThisComponent
      oActiveSheet = oBook.CurrentController.ActiveSheet
      oSelRange    = oBook.CurrentSelection
      
      ' Adicionar uma nova planilha 
      oBook.Sheets.insertNewByName("UnPivoted Table",0)
      oNewSheet = oBook.Sheets(0)
      
      ' Determine o tamanho dos cabeçalhos 
      iTopLabelRowCount  = InputBox(" Quantas linhas no cabeçalho superior? ")
      iSideLabelColCount = InputBox(" Quantas colunas no cabeçalho lateral? ")
                
      i = 0
         
      For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count
        For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count            
                           
          For j = 1 To iSideLabelColCount              
            oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula               
          Next j
                 
          For k = 1 To iTopLabelRowCount
            oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula
          Next k           
                             
          oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula
          i = i + 1                   
                
        Next c
      Next r
    End Sub
    

    Em seguida, feche Macro Editor e retorne à sua planilha em LibreOffice Calc. Selecione a tabela inteira com os cabeçalhos superior e esquerdo e execute nossa nova macro através do menu Tools - Macros - Run Macro...

    A macro irá inserir uma nova planilha nomeada em sua pasta de trabalho "UnPivoted Table" e adicione uma tabela no novo formato. Com essa tabela você pode fazer qualquer análise em LibreOffice Calc.

    Artigos sobre o tema:

  • Reorganização de tabelas (Unpivot) em Excel