помогите пожалуйста переделать макрос по многоуровневой групировке ячеек с добавлением промежуточных итогов [vba]
Код
Sub GroopBlock() Dim Col_ As Integer Dim Str_ As Integer Dim i As Integer Dim j As Integer i = 0 While ActiveSheet.Cells(Str_ + i, Col_).Value <> "" If ActiveSheet.Cells(Str_ + i + 1, Col_).Value = "" Then For j = Col_ + 1 To 7 If ActiveSheet.Cells(Str_ + i + 1, j).Value <> "" Then i = i + GroopBlock(j, Str_ + i + 1) Exit For End If Next j End If i = i + 1 Wend Range(Cells(Str_, 1), Cells(Str_ + i - 1, 1)).EntireRow.Group GroopBlock = i End Sub
[/vba] в прикрепление пример файл для групировки
помогите пожалуйста переделать макрос по многоуровневой групировке ячеек с добавлением промежуточных итогов [vba]
Код
Sub GroopBlock() Dim Col_ As Integer Dim Str_ As Integer Dim i As Integer Dim j As Integer i = 0 While ActiveSheet.Cells(Str_ + i, Col_).Value <> "" If ActiveSheet.Cells(Str_ + i + 1, Col_).Value = "" Then For j = Col_ + 1 To 7 If ActiveSheet.Cells(Str_ + i + 1, j).Value <> "" Then i = i + GroopBlock(j, Str_ + i + 1) Exit For End If Next j End If i = i + 1 Wend Range(Cells(Str_, 1), Cells(Str_ + i - 1, 1)).EntireRow.Group GroopBlock = i End Sub
[/vba] в прикрепление пример файл для групировкиniru1980
1. В примере покажите не только "как есть", но и на другом листе "как надо" с теми же данными. Да и пояснения не помешали бы. Во избежание недоразумений, так сказать 2. Выложенный Вами макрос содержит ошибки и в таком виде работать не может. По-хорошему Вам бы лучше обратиться туда, откуда Вы брали первоисточник до того, как его кто-то искалечил. Или это сразу был нежизнеспособный "недоносок-выкидыш"? Тогда см.п.1 выше.
1. В примере покажите не только "как есть", но и на другом листе "как надо" с теми же данными. Да и пояснения не помешали бы. Во избежание недоразумений, так сказать 2. Выложенный Вами макрос содержит ошибки и в таком виде работать не может. По-хорошему Вам бы лучше обратиться туда, откуда Вы брали первоисточник до того, как его кто-то искалечил. Или это сразу был нежизнеспособный "недоносок-выкидыш"? Тогда см.п.1 выше.Alex_ST
1. В примере покажите не только "как есть", но и на другом листе "как надо" с теми же данными. Да и пояснения не помешали бы. Во избежание недоразумений, так сказать 2. Выложенный Вами макрос содержит ошибки и в таком виде работать не может. По-хорошему Вам бы лучше обратиться туда, откуда Вы брали первоисточник до того, как его кто-то искалечил. Или это сразу был нежизнеспособный "недоносок-выкидыш"? Тогда см.п.1 выше.
1 прикладываю файл лист 1 как есть лист 2 как надо 2 макрос найден в инете сразу был нежизнеспособный
1. В примере покажите не только "как есть", но и на другом листе "как надо" с теми же данными. Да и пояснения не помешали бы. Во избежание недоразумений, так сказать 2. Выложенный Вами макрос содержит ошибки и в таком виде работать не может. По-хорошему Вам бы лучше обратиться туда, откуда Вы брали первоисточник до того, как его кто-то искалечил. Или это сразу был нежизнеспособный "недоносок-выкидыш"? Тогда см.п.1 выше.
1 прикладываю файл лист 1 как есть лист 2 как надо 2 макрос найден в инете сразу был нежизнеспособныйniru1980
я не Нострадамус, конечно, но угадал когда это попросил Если в Вашем файле-примере что-то кому-то и понятно, то это точно не я Нет даже заголовков столбцов и потому не ясен принцип подбора групп данных. Особенно - в столбце F, где у Вас полная мешанина. Чем-то напоминает, конечно, сводную таблицу… Я в них не спец, да и не достаточно свободного времени чтобы углублённо разбираться. Извините, но я пас. Может быть кто-нибудь ещё посмотрит.
я не Нострадамус, конечно, но угадал когда это попросил Если в Вашем файле-примере что-то кому-то и понятно, то это точно не я Нет даже заголовков столбцов и потому не ясен принцип подбора групп данных. Особенно - в столбце F, где у Вас полная мешанина. Чем-то напоминает, конечно, сводную таблицу… Я в них не спец, да и не достаточно свободного времени чтобы углублённо разбираться. Извините, но я пас. Может быть кто-нибудь ещё посмотрит.Alex_ST
я не Нострадамус, конечно, но угадал когда это попросил Если в Вашем файле-примере что-то кому-то и понятно, то это точно не я Нет даже заголовков столбцов и потому не ясен принцип подбора групп данных. Особенно - в столбце F, где у Вас полная мешанина. Чем-то напоминает, конечно, сводную таблицу… Я в них не спец, да и не достаточно свободного времени чтобы углублённо разбираться. Извините, но я пас. Может быть кто-нибудь ещё посмотрит.
в таблице первые 5 столбцов это размешения по которым нужно сгрупировать и расчитать промежуточные итоги в столбце F листа 2(как должно получиться) указаны промежуточные итоги по уровням вложености(они указаны там чтоб в дальнейшем первые 5 столбцов скрыть)
я не Нострадамус, конечно, но угадал когда это попросил Если в Вашем файле-примере что-то кому-то и понятно, то это точно не я Нет даже заголовков столбцов и потому не ясен принцип подбора групп данных. Особенно - в столбце F, где у Вас полная мешанина. Чем-то напоминает, конечно, сводную таблицу… Я в них не спец, да и не достаточно свободного времени чтобы углублённо разбираться. Извините, но я пас. Может быть кто-нибудь ещё посмотрит.
в таблице первые 5 столбцов это размешения по которым нужно сгрупировать и расчитать промежуточные итоги в столбце F листа 2(как должно получиться) указаны промежуточные итоги по уровням вложености(они указаны там чтоб в дальнейшем первые 5 столбцов скрыть)niru1980
нашел в инете еще один макрос подскажите пожалуйста как его настроить под мой документ [vba]
Код
Sub Multilevel_Group() Dim level As Single, i As Single Dim start As Single, LastRow As Single Const FIRST_ROW = 2 'это будет вашей первой строчкой группируемого списка Const FIRST_COLUMN = 1 'а это – первым столбиком группируемого списка Const NUMBER_OF_LEVELS = 5 'здесь прописано количество уровней Set ws = ActiveSheet ws.UsedRange.ClearOutline 'убираем все группировки на листе LastRow = WorksheetFunction.Match("Конец", ws.Columns(FIRST_COLUMN), 0) 'а таким образом мы определяем номер табличной последней строки 'затем мы проходим по всем уровням For level = 1 To NUMBER_OF_LEVELS start = 0 For i = FIRST_ROW To LastRow 'здесь вам понадобится номер строки, если нашли начальную ячейку группы If ws.Cells(i, level) <> "" And WorksheetFunction.CountA(ws.Cells(i + 1, FIRST_COLUMN).Resize(1, level)) = 0 Then start = i 'а здесь понадобится конец группы If WorksheetFunction.CountA(ws.Cells(i + 1, FIRST_COLUMN).Resize(1, level)) > 0 And start > 0 Then ws.Rows(start + 1 & ":" & i).Group start = 0 End If Next i Next level End Sub
[/vba]
нашел в инете еще один макрос подскажите пожалуйста как его настроить под мой документ [vba]
Код
Sub Multilevel_Group() Dim level As Single, i As Single Dim start As Single, LastRow As Single Const FIRST_ROW = 2 'это будет вашей первой строчкой группируемого списка Const FIRST_COLUMN = 1 'а это – первым столбиком группируемого списка Const NUMBER_OF_LEVELS = 5 'здесь прописано количество уровней Set ws = ActiveSheet ws.UsedRange.ClearOutline 'убираем все группировки на листе LastRow = WorksheetFunction.Match("Конец", ws.Columns(FIRST_COLUMN), 0) 'а таким образом мы определяем номер табличной последней строки 'затем мы проходим по всем уровням For level = 1 To NUMBER_OF_LEVELS start = 0 For i = FIRST_ROW To LastRow 'здесь вам понадобится номер строки, если нашли начальную ячейку группы If ws.Cells(i, level) <> "" And WorksheetFunction.CountA(ws.Cells(i + 1, FIRST_COLUMN).Resize(1, level)) = 0 Then start = i 'а здесь понадобится конец группы If WorksheetFunction.CountA(ws.Cells(i + 1, FIRST_COLUMN).Resize(1, level)) > 0 And start > 0 Then ws.Rows(start + 1 & ":" & i).Group start = 0 End If Next i Next level End Sub