Страницы: 1
RSS
Многоуровневая группировка данных
 
Всем привет.

Так как сам в VBA не силен, а времени на разбор у меня не много, прошу помочь в написании макроса, который будет группировать строки.
Макрос должен искать строки со значением "итог" и группировать строки выше.

Файл с примером во вложении
Изменено: oleg_man - 17.02.2017 17:44:37
 
Цитата
oleg_man написал:
времени на разбор у меня не много
Найдите время, чтобы ознакомиться с Правилами и покажите файл вместо неработающих ссылок.
 
Прошу прощения, что не по правилам. Файл приложил.
 
Пробуйте так..
Скрытый текст
 
Спасибо!!

Но, к сожалению, работает некорректно при большем количестве строк.
И еще, так как таблица форматированная, и в моем случае данные грузится с помощью подключения к базе данных Oracle, строка в которой производится снятие всех группировок ".ClearOutline" с листа выдает ошибку.  
Результат во вложении:
 
А сводная не лучше?
 
Нет, потому что в правой части у меня тоже должна быть группировка, но сводная агрегирует данные при группировке, что мне как раз не нужно, мне необходимо их просто свернуть, так как там у меня данные в динамике по неделям.
Все расчеты я произвел скриптом из базы данных, теперь мне остается только все "причесать" в экселе и отправить по почте, что должно происходить автоматически.
Если с обновлением, сохранением и отправкой по почте я разобрался, то вот в части форматирования у меня возникли проблемы...
 
С первой частью разобрался, добавил еще одно условие, чтобы счетчик k сбрасывался, если строка пустая.
Вот готовый вариант.
Код
Sub Group_()
    Dim i&, j&, k&, lr&, rng As Range

    lr = Cells(Rows.Count, "A").End(xlUp).Row
    Set rng = Range("A1:E" & lr)
    
    With rng
      '  .ClearOutline
        For j = 4 To 1 Step -1
            k = 0
            For i = 2 To lr
                If Not .Cells(i, j) Like "*итог:*" Then
                        If .Cells(i, j) = 0 Then
                            k = 0
                        Else
                            k = k + 1
                            End If
                            
                Else
                    .Rows(i - k & ":" & i - 1).Group: k = 0
                End If
            Next
        Next
    End With
End Sub


Подскажите теперь, почему не работает метод .ClearOutline в форматированной таблице? И как это пофиксить?
+ мне необходимо разгруппировать только строки, а не весь лист.
Изменено: oleg_man - 17.02.2017 18:56:44
 
Виноват. Но группировка это ведь всегда лист..разве не так?
 
Маугли, спасибо огромное!

Да, но в данном случае мне необходима группировка и разгруппировка только по строкам. Столбцы я группирую один раз руками и они будут статичными, а вот строки у меня могут измениться.

Помоги пожалуйста с методом .ClearOutline для форматированной таблицы.
 
Извините, еще раз. Я думаю спецы лучше подскажут  где ошибка.
Ну вот методом проб так..
Скрытый текст
Изменено: Маугли - 17.02.2017 20:31:42
Страницы: 1
Наверх