Многоуровневые таблицы и группировка строк
Не все таблицы просты, как дважды два. Порой приходится создавать сложные и, что главное, очень большие таблицы. А монитор при этом не столь большой, как хотелось бы. И при работе с таблицей возникает большое желание свернуть подальше ненужные данные, а оставить лишь необходимые.
Что ж, можете радоваться, это вполне возможно. Называется ваше истовое желание – скрытие ненужных строк, а также группировка. О скрытии можно сказать, что сей способ не очень удобен, но действенен. Вам достаточно кликнуть правой кнопкой вашей мышки по заголовку столбика, и там вы найдете команду Скрыть (она прячется в контекстном меню). Ну вот, уже несколькими ячейками, временно не нужными, стало меньше.
Но здесь есть минус: каждый столбик и каждая строчка, которые нужно скрыть, будут пройдены вами вручную, персонально. Чтобы отобразить ячейки обратно, идите в то же самое контекстное меню и ищите там команду Отобразить.
А если выделить сразу несколько строчек (или, аналогично, столбиков), их можно сгруппировать, это будет проявляться в появлении прямоугольной скобы. Для этого идите (после выделения) в Данные, ищите там Группу и структуру, а в ней – Группировать. Делать такие группы можно вложенными друг в друга, причем вы можете сделать до восьми уровней таких вложенных групп.
А чтобы сгруппировать данные макросом, нам потребуется таблица, где четко видны вложенные уровни информации. Вручную группировать вы запаритесь. Так что, автор сайта р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
В макрос можно вставить свой нужный номер ячейки, с которой начинается список (именно отсюда и пойдет группировка), а также номер первого списочного столбца. Но нужно помнить, что для корректной работы макроса нужно обязательное слово Конец, в последней строчке. А еще уровни должны заполняться по порядку, так что третий уровень данных не должен быть написан ранее второго.
?- 01/10/2011 21:10 - Сортировка ячеек по цвету
- 25/09/2011 13:31 - Условное форматирование
- 28/08/2011 10:09 - Конвертер разных величин
- 27/08/2011 17:59 - Как найти латинские буквы в русском документе?
- 25/07/2011 11:30 - Делаем выпадающие списки с картинками
- 12/03/2011 23:07 - Условное форматирование таблицы в Excel 2010
- 12/03/2011 22:57 - Рисуем свободную таблицу в Excel 2010
- 13/12/2010 18:17 - Столбцы в Excel – преобразование в строки
- 13/12/2010 17:27 - Таблицы Excel