Так как сам в VBA не силен, а времени на разбор у меня не много, прошу помочь в написании макроса, который будет группировать строки. Макрос должен искать строки со значением "итог" и группировать строки выше.
Sub Group_()
Dim i&, j&, k&, lr&, rng As Range
lr = Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Range("A1:D" & 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
k = k + 1
Else
.Rows(i - k & ":" & i - 1).Group: k = 0
End If
Next
Next
End With
End Sub
Но, к сожалению, работает некорректно при большем количестве строк. И еще, так как таблица форматированная, и в моем случае данные грузится с помощью подключения к базе данных 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 в форматированной таблице? И как это пофиксить? + мне необходимо разгруппировать только строки, а не весь лист.
Да, но в данном случае мне необходима группировка и разгруппировка только по строкам. Столбцы я группирую один раз руками и они будут статичными, а вот строки у меня могут измениться.
Помоги пожалуйста с методом .ClearOutline для форматированной таблицы.
Извините, еще раз. Я думаю спецы лучше подскажут где ошибка. Ну вот методом проб так..
Скрытый текст
Код
Sub Group_()
Dim i&, j&, k&, lr&, rng As Range
lr = Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Sheets("1").Range("A1:D" & lr)
With rng
Selection.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