때로는 크로스(피벗) 테이블을 플랫 테이블로 변환해야 할 경우도 있습니다. 이 절차를 " 데이터 정리 "
LibreOffice Calc 프로그램에는 피벗 테이블을 " 효력 "이지만 해당 절차를 직접 작성할 수도 있습니다. 수행 방법을 살펴보겠습니다.
문제의 본질을 더 명확하게 이해하기 위해 아래 그림을 살펴 보겠습니다. 왼쪽에는 행렬 형태의 테이블(피벗 테이블)이 있고 오른쪽에는 열이 있는 일반 테이블(플랫 테이블)이 있습니다.
테이블을 확장할 때 행렬 테이블의 열 교차점인 속성-값 쌍의 압축을 풀고 플랫 테이블의 평면화된 열로 방향을 다시 지정합니다.
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... 메뉴를 통해 새 매크로를 실행합니다.
매크로는 통합 문서에 새 이름의 시트를 삽입합니다.
유틸리티를 사용할 수도 있습니다. "피벗 테이블(Unpivot)" 확장 프로그램을 설치하여 YLC_Utilities.oxt .
그 후에는 LibreOffice Calc에서 열리는 모든 파일에서 이 유틸리티를 사용할 수 있습니다.