Прошу помочь с написанием макроса, который бы работал следующим образом:
0. На листе создается кнопка "Группировка", которая активирует макрос, при нажатии на нее; кнопка "Сгруппировать", которая группирует все существующие связи; "Разгруппировать", которая разгруппирует их, соответственно.
При нажатии на кнопку "Группировка", происходят следующие процессы: 1. Сбрасываются (удаляются) все действующие группировки на листе; 2. Определяется диапазон работы макроса - со строки № 6 листа (включительно), до строки, в столбце В которой значение "Общий итог" (номер строки не определен!!); 3. Группируются строки, в столбце А которых стоит значение "-", разумеется каждый набор последовательно идущих строк, удовлетворяющих условие, группируется отдельно, "не задевая" те строки, которые условие не удовлетворяют.
ПС. Если есть вариант решения задачи не макросом, а иным способом - то будет вообще супер!
Пример прилагаю. Благодарю за уделенное время!
Добрый день!
Прошу помочь с написанием макроса, который бы работал следующим образом:
0. На листе создается кнопка "Группировка", которая активирует макрос, при нажатии на нее; кнопка "Сгруппировать", которая группирует все существующие связи; "Разгруппировать", которая разгруппирует их, соответственно.
При нажатии на кнопку "Группировка", происходят следующие процессы: 1. Сбрасываются (удаляются) все действующие группировки на листе; 2. Определяется диапазон работы макроса - со строки № 6 листа (включительно), до строки, в столбце В которой значение "Общий итог" (номер строки не определен!!); 3. Группируются строки, в столбце А которых стоит значение "-", разумеется каждый набор последовательно идущих строк, удовлетворяющих условие, группируется отдельно, "не задевая" те строки, которые условие не удовлетворяют.
ПС. Если есть вариант решения задачи не макросом, а иным способом - то будет вообще супер!
Пример прилагаю. Благодарю за уделенное время!Sl1mka
Sub GroupRow() Dim i As Long, TotalRow As Long, CurNumber As Long, CurNumberRow As Long, NextNumber As Long, NextNumberRow As Long On Error Resume Next CurNumber = 1 CurNumberRow = 6 TotalRow = Application.WorksheetFunction.Match("Общий итог", Sheet1.Range("B:B"), 0) Sheet1.Rows("6:" & CStr(TotalRow)).Select For i = 1 To 9 Selection.Rows.Ungroup Next i Err.Number = 0 Do NextNumber = CurNumber + 1 NextNumberRow = Application.WorksheetFunction.Match(NextNumber, Sheet1.Range("A:A"), 0) If Err.Number <> 0 Then NextNumberRow = TotalRow Sheet1.Rows(CurNumberRow + 1 & ":" & NextNumberRow - 1).Select Selection.Rows.Group CurNumber = NextNumber CurNumberRow = NextNumberRow If CurNumberRow = TotalRow Then Exit Do Loop MsgBox "Rows regrouping process is complete", vbInformation, "Rows have been regrouped successfully" End Sub
[/vba]
Ну, как-то так..... [vba]
Код
Sub GroupRow() Dim i As Long, TotalRow As Long, CurNumber As Long, CurNumberRow As Long, NextNumber As Long, NextNumberRow As Long On Error Resume Next CurNumber = 1 CurNumberRow = 6 TotalRow = Application.WorksheetFunction.Match("Общий итог", Sheet1.Range("B:B"), 0) Sheet1.Rows("6:" & CStr(TotalRow)).Select For i = 1 To 9 Selection.Rows.Ungroup Next i Err.Number = 0 Do NextNumber = CurNumber + 1 NextNumberRow = Application.WorksheetFunction.Match(NextNumber, Sheet1.Range("A:A"), 0) If Err.Number <> 0 Then NextNumberRow = TotalRow Sheet1.Rows(CurNumberRow + 1 & ":" & NextNumberRow - 1).Select Selection.Rows.Group CurNumber = NextNumber CurNumberRow = NextNumberRow If CurNumberRow = TotalRow Then Exit Do Loop MsgBox "Rows regrouping process is complete", vbInformation, "Rows have been regrouped successfully" End Sub