Многоуровневые таблицы и группировка строк

Рейтинг пользователей: / 20
ХудшийЛучший 

40Не все таблицы просты, как дважды два. Порой приходится создавать сложные и, что главное, очень большие таблицы. А монитор при этом не столь большой, как хотелось бы. И при работе с таблицей возникает большое желание свернуть подальше ненужные данные, а оставить лишь необходимые.

Что ж, можете радоваться, это вполне возможно. Называется ваше истовое желание – скрытие ненужных строк, а также группировка. О скрытии можно сказать, что сей способ не очень удобен, но действенен. Вам достаточно кликнуть правой кнопкой вашей мышки по заголовку столбика, и там вы найдете команду Скрыть (она прячется в контекстном меню). Ну вот, уже несколькими ячейками, временно не нужными, стало меньше.

Но здесь есть минус: каждый столбик и каждая строчка, которые нужно скрыть, будут пройдены вами вручную, персонально. Чтобы отобразить ячейки обратно, идите в то же самое контекстное меню и ищите там команду Отобразить.

41А если выделить сразу несколько строчек (или, аналогично, столбиков), их можно сгруппировать, это будет проявляться в появлении прямоугольной скобы. Для этого идите (после выделения) в Данные, ищите там Группу и структуру, а в ней – Группировать. Делать такие группы можно вложенными друг в друга, причем вы можете сделать до восьми уровней таких вложенных групп.

А чтобы сгруппировать данные макросом, нам потребуется таблица, где четко видны вложенные уровни информации. Вручную группировать вы запаритесь. Так что, автор сайта рlаnеtаеxсеl делится своим макросом:

 

Sub Multilevel_Group()

Dim level As Single, i As Single

Dim start As Single, LastRow As Single

 

Const FIRST_ROW = 2         это будет вашей первой строчкой группируемого списка

Const FIRST_COLUMN = 1      'а это – первым столбиком группируемого списка

Const NUMBER_OF_LEVELS = 3  'здесь прописано количество уровней

 

Set ws = ActiveSheet

ws.UsedRange.ClearOutline   'убираем все группировки на листе

LastRow = WorksheetFunction.Match("Конец", ws.Columns(FIRST_COLUMN), 0) 'а таким образом мы определяем номер табличной последней строки

 

'затем мы проходим  по всем уровням

For level = 1 To NUMBER_OF_LEVELS

start = 0

For i = FIRST_ROW To LastRow

'здесь вам понадобится номер строки, если нашли начальную ячейку группы

If ws.Cells(i, level) <> "" And _

WorksheetFunction.CountA(ws.Cells(i + 1, FIRST_COLUMN).Resize(1, level)) = 0 Then start = i

 

'а здесь понадобится конец группы

If WorksheetFunction.CountA(ws.Cells(i + 1, FIRST_COLUMN).Resize(1, level)) > 0 And start > 0 Then

ws.Rows(start + 1 & ":" & i).Group

start = 0

End If

Next i

Next level

End Sub

 

В макрос можно вставить свой нужный номер ячейки, с которой начинается список (именно отсюда и пойдет группировка), а также номер первого списочного столбца. Но нужно помнить, что для корректной работы макроса нужно обязательное слово Конец, в последней строчке. А еще уровни должны заполняться по порядку, так что третий уровень данных не должен быть написан ранее второго.

?