Страницы: 1
RSS
Группировка строк по части текста в ячейке
 
Доброго вечера, Планетяне!
Помогите, пожалуйста макросом сгруппировать строки по критериям в ячейке. Критерием для диапазонов последовательной группировки является наличие "ааа_" или "яяя_" в ячейке.
Я сначала хотел их в диапазон забрать как тут и сгруппировать, но это ведь отдельные диапазоны, которые и группироваться должны отдельно.
На скрине показано, какой результат от макроса жду. В файле-примере - "до" и "после"

P.S.: к форматированию сознательно не привязывался (и использовал вот эти "тэги", которые впоследствии удаляю), поскольку форматирование может меняться
Изменено: Jack Famous - 26.06.2017 18:05:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
Sub GroupText()
Dim lstr, i&, y&
Application.ScreenUpdating = False
ActiveSheet.Outline.ShowLevels RowLevels:=2
lstr = Cells(Rows.Count, 1).End(xlUp).Row
ReDim t(1 To lstr, 1 To 2)
For i = 5 To lstr
    If Cells(i, 1) Like "ааа_*" Or Cells(i, 1) Like "яяя_*" Then
        y = y + 1
        t(y, 1) = Cells(i, 1): t(y, 2) = Cells(i, 2)
    End If
Next
[D5].Resize(y, 2) = t
Application.ScreenUpdating = True
End Sub
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, спасибо за ответ, но у меня не работает((( и Rows.Group я не вижу в коде - думал через него группировка происходит…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Нашёл вот такой код, но никак не могу применить у себя… Чую, что что-то очень похожее должно быть.
Не получается именно определять начало и конец диапазонов для группировки.
Изменено: Jack Famous - 26.06.2017 19:35:42
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Вы меня изначально дезинформировали. Я думал, что группировка уже существует.
--------
Тогда бежим циклом, расставляем метки. Затем по этим меткам делаем группировку. Метки удаляем.
Код
Sub GroupText()
Dim lstr&, i&, lev As Range, r As Range
Application.ScreenUpdating = False
lstr = Cells(Rows.count, 1).End(xlUp).row
For i = 5 To lstr
    If Cells(i, 1) Like "ааа_*" Or Cells(i, 1) Like "яяя_*" Then
        Cells(i, 3) = 1
    End If
Next
Set lev = Range("C5:C" & lstr).SpecialCells(xlCellTypeConstants)
For Each r In lev.SpecialCells(xlCellTypeConstants).Areas
    Rows(r.row & ":" & r.row + lev.Rows.count - 1).Rows.group
Next
Columns("C:C").Clear
Application.ScreenUpdating = True
End Sub
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Пример правильный.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, большое спасибо - всё работает)))
Наверное, именно скрин ввёл в заблуждение, поскольку в файл-примере всё именно так, как вы показали - лист "как щас" и "как надо")))
Идею группировки по дополнительному столбцу понял. Теперь попробую обойтись без него (в массив какой-нибудь собирать). По результатам отпишусь сюда)
Уважаемые знатоки, а что ВЫ можете сказать по поводу быстродействия? Что должно быстрее работать при большом объёме отчёта - доп. столбец или что-то другое?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Всё решил через Union. Пример брал отсюда

Макрос (финальный) с Union и макрос от Владимира - в этой книге
Группировка диапазонов через Union
Изменено: Jack Famous - 27.06.2017 12:21:01
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх