Іноді виникає необхідність перетворити перехресну (зведену) таблицю у плоску. Дана процедура називається "розпрямлянням даних"
Програма 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.