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

Вход

Регистрация

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

 

= Мир MS Excel/Создание листов по уровням таблицы - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Создание листов по уровням таблицы
smugi Дата: Четверг, 14.08.2025, 10:30 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте, не могу создать тему. Решила здесь спросить. В документе более 20тысяч строк. Помогите с написанием макроса. Необходимо разгруппировать по новым листам уровни с названием этих уровней и данными только названного уровня.
К сообщению приложен файл: razgruppirovka_po_listam.xlsm (15.0 Kb)
 
Ответить
СообщениеЗдравствуйте, не могу создать тему. Решила здесь спросить. В документе более 20тысяч строк. Помогите с написанием макроса. Необходимо разгруппировать по новым листам уровни с названием этих уровней и данными только названного уровня.

Автор - smugi
Дата добавления - 14.08.2025 в 10:30
_Boroda_ Дата: Четверг, 14.08.2025, 11:07 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16920
Репутация: 6617 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Новую тему сделал. Из-за спамерских атак на форуме ВРЕМЕННО сделана предмодерация, о чем в каждой ветке создано закрепленное сообщение.

По самой теме помочь, к сожалению, не смогу - на работе скачивать и отправлять файлы с макросами запрещено политикой безопасности компании


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНовую тему сделал. Из-за спамерских атак на форуме ВРЕМЕННО сделана предмодерация, о чем в каждой ветке создано закрепленное сообщение.

По самой теме помочь, к сожалению, не смогу - на работе скачивать и отправлять файлы с макросами запрещено политикой безопасности компании

Автор - _Boroda_
Дата добавления - 14.08.2025 в 11:07
smugi Дата: Четверг, 14.08.2025, 11:13 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Спасибо. За ответ.
 
Ответить
СообщениеСпасибо. За ответ.

Автор - smugi
Дата добавления - 14.08.2025 в 11:13
msi2102 Дата: Четверг, 14.08.2025, 16:30 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 442
Репутация: 132 ±
Замечаний: 0% ±

Excel 2019
Попробуйте таким макросом
[vba]
Код
Sub RowGroup()
    Dim rn As Range, rn_ob As Range, lv As String, sd As Object, lst As Object, sh As Worksheet, wsh As Worksheet, n As Integer, y
    Set sd = CreateObject("Scripting.Dictionary")
    Set lst = CreateObject("Scripting.Dictionary")
    Set wsh = ActiveSheet
    Set rn_ob = wsh.UsedRange.Rows
    For Each sh In ActiveWorkbook.Worksheets
        lst.Add sh.Name, sh.Name
    Next
    For Each rn In rn_ob
        If rn.Rows.OutlineLevel = 2 Then
            lv = rn.Value2(1, 1)
            If Not sd.Exists(lv) Then
                sd.Add lv, rn
            Else
                Set sd(lv) = Application.Union(sd(lv), rn)
            End If
        ElseIf rn.Rows.OutlineLevel > 2 Then
            Set sd(lv) = Application.Union(sd(lv), rn)
        End If
    Next
    For Each y In sd
        lv = y
        If lst.Exists(lv) Then
            n = 1
            Do
                lv = y
                lv = lv & n
                n = n + 1
            Loop Until Not lst.Exists(lv)
        End If
        Sheets.Add.Name = lv
        sd(y).Copy Destination:=Worksheets(lv).Range("A1")
    Next
End Sub
[/vba]
К сообщению приложен файл: razgruppirovka_po_listam.xlsm (23.3 Kb)


Сообщение отредактировал msi2102 - Четверг, 14.08.2025, 17:48
 
Ответить
СообщениеПопробуйте таким макросом
[vba]
Код
Sub RowGroup()
    Dim rn As Range, rn_ob As Range, lv As String, sd As Object, lst As Object, sh As Worksheet, wsh As Worksheet, n As Integer, y
    Set sd = CreateObject("Scripting.Dictionary")
    Set lst = CreateObject("Scripting.Dictionary")
    Set wsh = ActiveSheet
    Set rn_ob = wsh.UsedRange.Rows
    For Each sh In ActiveWorkbook.Worksheets
        lst.Add sh.Name, sh.Name
    Next
    For Each rn In rn_ob
        If rn.Rows.OutlineLevel = 2 Then
            lv = rn.Value2(1, 1)
            If Not sd.Exists(lv) Then
                sd.Add lv, rn
            Else
                Set sd(lv) = Application.Union(sd(lv), rn)
            End If
        ElseIf rn.Rows.OutlineLevel > 2 Then
            Set sd(lv) = Application.Union(sd(lv), rn)
        End If
    Next
    For Each y In sd
        lv = y
        If lst.Exists(lv) Then
            n = 1
            Do
                lv = y
                lv = lv & n
                n = n + 1
            Loop Until Not lst.Exists(lv)
        End If
        Sheets.Add.Name = lv
        sd(y).Copy Destination:=Worksheets(lv).Range("A1")
    Next
End Sub
[/vba]

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

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