Страницы: 1
RSS
Поиск и перенос данных из листа с группировками
 
доброго времени суток
получаю из 1С, 2 файла приблизительно как во вложении
задача состоит в разбивке содержимого подгрупп (A1, B1, C1, D1 ...) по страницам (страница A1, страница B1, страница C1, страница D1 ...)
возможно ли это как то реализовать?
заранее благодарю  
 
Почему у товара В нет погруппы В1, хотя у всех остальных есть?
 
Группа В не имеет подгруппы так как товар скажем "уникален"
если это мешает можно убрать его из таблицы вообще
вариант без группы В  
 
Цитата
задача состоит в разбивке содержимого подгрупп (A1, B1, C1, D1 ...) по страницам
Что вы подразумеваете под страницами? Листы этой же книги?
 
под страницами имею ввиду листы (извините не правильно сформулировал)
желательно новой книги  
Изменено: assedo - 15.02.2016 20:23:33
 
Цитата
имею ввиду листы
Сколько листов должно быть: А1, В, С1, С2, С3 и D или по другому?
Товары склада1 и основного должны быть объединены?
 
дело в том что листов много будет, я выложил пример структуры
база с товарами очень большая - несколько складов, десятки групп, сотни товаров

"Товары склада1 и основного должны быть объединены?" - в идеале да, должны быть объеденный и просуммированы - ну как бы с этим я могу справиться, а разбить по листам увы.
 
В модуль:
Код
Option Explicit

Function Level(Optional cCell As Range)
    Application.Volatile
    ' LEVEL returns the outline level of the current row. It will not automatically update and therefore
    ' a recalculation Ctrl-Alt-F9 is required.
    '
    'SYNTAX
    ' =level()

    'EXAMPLE
    ' Let the outline level of the row be 1, =level() returns 1.
    '
    ' Author: Andrew O'Connor <andrew.oconnor@relken.com>
    ' Date: 23 Apr 2013
    ' Copyright: 2014 Relken Engineering

    If cCell Is Nothing Then
        Set cCell = Application.Caller
    End If
    Level = cCell.Rows.OutlineLevel

End Function
Function WorksheetExist(wsname As String) As Boolean
'Возвращает ИСТИНА, если лист существует
    Dim x As Worksheet
    On Error Resume Next
    Set x = Worksheets(wsname)
    WorksheetExist = (Err = 0)
End Function


Public Sub www()
    Dim a, ws As Worksheet, r As Range, lr&
    Application.ScreenUpdating = 0
    With Sheets("TDSheet")
        .AutoFilterMode = 0
        Set r = .Range("c10:c" & [c65536].End(xlUp).Row)
        r.Offset(, 1).Formula = "=Level()"
        r.Offset(, 1).AutoFilter field:=1, Criteria1:=5
        .Calculate
        For Each a In r.Offset(1).SpecialCells(12).Areas
            If WorksheetExist(.Cells(a.Row - 1, 2).Value) Then
                Set ws = Sheets(.Cells(a.Row - 1, 2).Value)
                lr = Sheets(.Cells(a.Row - 1, 2).Value).[c65536].End(xlUp).Row + 1
                a.EntireRow.Copy ws.Cells(lr, 1)
                ws.[2:3].EntireColumn.AutoFit
            Else
                Set ws = Worksheets.Add
                ws.Name = .Cells(a.Row - 1, 2).Value
                a.EntireRow.Copy ws.[a1]
                ws.[2:3].EntireColumn.AutoFit
            End If
        Next
        .AutoFilterMode = 0
    End With
    Application.ScreenUpdating = -1
End Sub
Я сам - дурнее всякого примера! ...
 
KuklP
Сергей! Рад приветствовать тебя на просторах Планеты.
Почему в файле нет товаров группы В?
Зачем пустой лист Итог?
 
Привет, Володя. О группе В вы общались с ТС выше :) Вроде как не надо. А Итог, то таке.. Лень было ресайз дописать в строке 42. А вдруг пригодится :D
Я сам - дурнее всякого примера! ...
 
На листе TDSheet присутствует группа В и D, которые, как я полагаю, должны быть на отдельных листах.
 
ТС полагает иначе:
Цитата
assedo написал: задача состоит в разбивке содержимого подгрупп (A1, B1, C1, D1 ...) по страницам
Цитата
assedo написал: Группа В не имеет подгруппы ... можно убрать его из таблицы вообще
:) Но никто не станет возражать против написания тобой кода, где группы без подгрупп выносились бы в отдельные листы :D
Я сам - дурнее всякого примера! ...
 
Цитата
ТС полагает иначе:
ТС уже спит давно, раз ничего не пишет  :D
 
Цитата
ТС уже спит давно, раз ничего не пишет  
почти )))
Владимир и Сергей примного благодарен за Вашу помощь
жаль что плохо разбираюсь в макросах
надеюсь доучусь до того, что бы дописать 42 строчку

завтра буду испытывать на оригинале
надеюсь все получится

еще раз СПАСИБО!!!
 
42 строка д.б. такой:
Код
For Each a In r.Offset(1).Resize(r.Rows.Count - 1).SpecialCells(12).Areas
Я сам - дурнее всякого примера! ...
 
Сергей, благодарю
Изменено: assedo - 17.02.2016 15:32:53
 
Сергей, благодарю за 42 строку
на оригинале сработало!
вот только с группой В траблз
как оказалось групп без подгрупп тоже предостаточно
есть варианты как это тоже побороть?
заранее благодарю
Страницы: 1
Наверх