Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Автоматическая многоуровневая группировка строк - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Автоматическая многоуровневая группировка строк
Vilgelm Дата: Четверг, 08.06.2023, 16:45 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 20% ±

2019
Имеется таблица, которой каждой строке присвоен номер уровня
1
1.1
1.2
1.2.1
1.2.2
2
2.1
2.1.1
2.1.2
Количество строк меняется каждый раз. Необходимо осуществлять автоматическую группировку каждого уровня при помощи макроса
Прикладываю пример таблицы
К сообщению приложен файл: primer_tablicy.xlsm (23.9 Kb)


Сообщение отредактировал Vilgelm - Четверг, 08.06.2023, 17:05
 
Ответить
СообщениеИмеется таблица, которой каждой строке присвоен номер уровня
1
1.1
1.2
1.2.1
1.2.2
2
2.1
2.1.1
2.1.2
Количество строк меняется каждый раз. Необходимо осуществлять автоматическую группировку каждого уровня при помощи макроса
Прикладываю пример таблицы

Автор - Vilgelm
Дата добавления - 08.06.2023 в 16:45
Pelena Дата: Четверг, 08.06.2023, 22:03 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19405
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
Можно привязаться к количеству точек в номерах. Правда пришлось убрать задвоение точек в некоторых номерах
[vba]
Код
Public Sub GroupRows()
    Dim lrow As Long, i As Long, n As Long

    With ActiveSheet
        lrow = .Cells(.Rows.Count, 2).End(xlUp).Row

        For i = 5 To lrow
            If .Cells(i, 2) <> "" Then
                n = Len(.Cells(i, 2)) - Len(Replace(.Cells(i, 2), ".", "")) + 1
                .Rows(i).OutlineLevel = n
            End If
        Next i

    End With

End Sub
[/vba]
К сообщению приложен файл: primer_tablicy2.xlsm (33.1 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеМожно привязаться к количеству точек в номерах. Правда пришлось убрать задвоение точек в некоторых номерах
[vba]
Код
Public Sub GroupRows()
    Dim lrow As Long, i As Long, n As Long

    With ActiveSheet
        lrow = .Cells(.Rows.Count, 2).End(xlUp).Row

        For i = 5 To lrow
            If .Cells(i, 2) <> "" Then
                n = Len(.Cells(i, 2)) - Len(Replace(.Cells(i, 2), ".", "")) + 1
                .Rows(i).OutlineLevel = n
            End If
        Next i

    End With

End Sub
[/vba]

Автор - Pelena
Дата добавления - 08.06.2023 в 22:03
msi2102 Дата: Пятница, 09.06.2023, 10:03 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 415
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Ну или можно так, и тогда можно не удалять задвоение точек
[vba]
Код
Public Sub GroupRows_1()
    Dim lrow As Long, i As Long, n As Long
    Cells.ClearOutline
    With ActiveSheet
        lrow = .Cells(.Rows.Count, 2).End(xlUp).Row
        For i = 5 To lrow
            If .Cells(i, 2) <> "" Then
                s = Split(.Cells(i, 2), ".")
                If UBound(s) = 0 Then n = 1 Else n = UBound(s) + 1
                For j = 0 To UBound(s)
                    If Trim(s(j)) = "" Then n = n - 1
                Next
                .Rows(i).OutlineLevel = n
                .Cells(i, 2).IndentLevel = n - 1
            End If
        Next i
    End With
End Sub
[/vba]
К сообщению приложен файл: 5224971.xlsm (31.9 Kb)


Сообщение отредактировал msi2102 - Пятница, 09.06.2023, 10:14
 
Ответить
СообщениеНу или можно так, и тогда можно не удалять задвоение точек
[vba]
Код
Public Sub GroupRows_1()
    Dim lrow As Long, i As Long, n As Long
    Cells.ClearOutline
    With ActiveSheet
        lrow = .Cells(.Rows.Count, 2).End(xlUp).Row
        For i = 5 To lrow
            If .Cells(i, 2) <> "" Then
                s = Split(.Cells(i, 2), ".")
                If UBound(s) = 0 Then n = 1 Else n = UBound(s) + 1
                For j = 0 To UBound(s)
                    If Trim(s(j)) = "" Then n = n - 1
                Next
                .Rows(i).OutlineLevel = n
                .Cells(i, 2).IndentLevel = n - 1
            End If
        Next i
    End With
End Sub
[/vba]

Автор - msi2102
Дата добавления - 09.06.2023 в 10:03
Vilgelm Дата: Пятница, 09.06.2023, 15:00 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 20% ±

2019
Pelena,
Большое спасибо!!!
Но возник еще один нюанс. На одном листе может располагаться несколько таблиц
разделенными несколькими строками
Пример во вложении
К сообщению приложен файл: primer_tablicy_2.xlsm (24.4 Kb)


Сообщение отредактировал Serge_007 - Пятница, 09.06.2023, 16:43
 
Ответить
СообщениеPelena,
Большое спасибо!!!
Но возник еще один нюанс. На одном листе может располагаться несколько таблиц
разделенными несколькими строками
Пример во вложении

Автор - Vilgelm
Дата добавления - 09.06.2023 в 15:00
Pelena Дата: Пятница, 09.06.2023, 16:33 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 19405
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
На одном листе может располагаться несколько таблиц

что это меняет? Группировка работает до последней заполненной строки.
Если надо как-то по-другому, поясните подробнее


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
На одном листе может располагаться несколько таблиц

что это меняет? Группировка работает до последней заполненной строки.
Если надо как-то по-другому, поясните подробнее

Автор - Pelena
Дата добавления - 09.06.2023 в 16:33
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!