TOP

LibreOffice Calc のテーブル (Unpivot) の再編成

説明

クロス (ピボット) テーブルをフラット テーブルに変換する必要がある場合があります。この手順は「」と呼ばれます。 データの修正 」 (unpivot data) 。そうした結果、「 矯正 " 同様のデータがすべて 1 つの列に含まれるテーブルが得られます。

プログラム LibreOffice Calc には、ピボット テーブルを " フラット 」と書かれていますが、対応する手順を自分で書くこともできますので、その方法を見てみましょう。



問題の本質をより明確に理解するために、下の図を見てみましょう。左側には行列形式のテーブル (ピボット テーブル) があり、右側には列を含む通常のテーブル (フラット テーブル) があります。

テーブルを展開するときは、マトリックス テーブル内の列の交点である属性と値のペアを解凍し、フラット テーブル内のフラット化された列に方向を変更します。

  • 価値 (Values) (左側の青色) 新しい列に展開します (右側の青色)。
  • 属性 (Attributes) (左側の緑色) も新しい列 (右側の緑色) に展開され、新しい値の列に従って複製されます。
  • UnPivotTable プロシージャの BASIC コード

    メニュー Tools - Macros - Edit Macros... を開き、Module1 を選択して、次のテキストをモジュールにコピーします。

    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
      
      ' 新しいシートを追加する 
      oBook.Sheets.insertNewByName("UnPivoted Table",0)
      oNewSheet = oBook.Sheets(0)
      
      ' ヘッダーのサイズを決定する 
      iTopLabelRowCount  = InputBox(" 一番上のヘッダーは何行ですか? ")
      iSideLabelColCount = InputBox(" サイドヘッダーは何列ですか? ")
                
      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
    

    次に、Macro Editor を閉じて、LibreOffice Calc のワークシートに戻ります。上部と左側のヘッダーを持つテーブル全体を選択し、メニュー Tools - Macros - Run Macro... から新しいマクロを実行します。

    マクロは新しい名前付きシートをワークブックに挿入します。 "UnPivoted Table" をクリックし、新しい形式でテーブルを追加します。このようなテーブルを使用すると、LibreOffice Calc であらゆる分析を行うことができます。

    トピックに関する記事:

  • Excel のテーブル (Unpivot) の再編集