Не секрет, что большинство пользователей Excel, создавая таблицы на листах, думают в первую очередь о собственном комфорте, т.е. при разработке дизайна таблиц исходят из критериев удобства просмотра для человека, но не удобства для Excel. Вот и рождаются на свет красивые, со сложными "шапками", пестрые и громоздкие таблицы, которые при этом совершенно нельзя ни отфильтровать, ни отсортировать, а про автоматический отчет сводной таблицей лучше и не думать вообще.
Рано или поздно пользователь такой таблицы приходит к мысли, что "пусть будет не так красиво, зато можно работать" и начинает упрощать дизайн своей таблицы, приводя его в соответствие с классическими рекомендациями. И если сделать однострочную шапку или разбить один столбец на несколько достаточно просто, то реконструирование таблицы может занять много времени (особенно при больших размерах таблицы). Имеется ввиду следующая ситуация:
Из |
|
сделать |
|
Такую задачу лучше решать при помощи макроса. Откройте редактор Visual Basic (Сервис - Макрос - Редактор Visual Basic), вставьте новый модуль (Insert - Module) и скопируйте туда текст этого макроса:
Sub Redesigner()
Dim InVal As Variant
Dim OutVal() As Variant
Dim j, k, i As Long
i = 1
InVal = Selection.Formula
ReDim OutVal(1 To Selection.Count, 1 To 3)
For j = 2 To UBound(InVal, 1)
For k = 2 To UBound(InVal, 2)
If InVal(j, k) <> "" Then
OutVal(i, 1) = InVal(j, 1)
OutVal(i, 2) = InVal(1, k)
OutVal(i, 3) = InVal(j, k)
i = i + 1
End If
Next k
Next j
Set NewSheet = Worksheets.Add
NewSheet.Range("A1").Resize(UBound(OutVal, 1), 3).Value = OutVal
End Sub
После этого можно закрыть редактор VBA, вернуться в Excel, выделить исходную таблицу (полностью, с шапкой и первым столбцом с месяцами) и запустить наш макрос через меню Сервис - Макрос - Макросы (Tools - Macro - Macros).
Макрос вставит в книгу новый лист и создаст на нем новый, реконструированный вариант выделенной таблицы. С такой таблицей можно работать "по полной программе", применяя весь арсенал средств Excel для обработки и анализа больших списков.