Страницы: 1
RSS
Разгрупировка данных. Данные по группе в отдельную колонку
 
Добрый день коллеги, прошу помощи,
Бьюсь уже не первый день для правильной разгрупировки
Дано - книга ексель с таблицей взятой из 1С
Групировка идет по поставщикам "0-9", выделенные зеленым цветом, по ним и создана группировка.
Суть проблемы
Разгрупировать таблицу, поставщик 0-9 должен попасть в отдельный столбец напротив каждой позиции его группировки. (Поставщик 0 попадает в строку 5 колонка 2 "диск колісний", поставщик 2 попадает в строки 9-26 колонки 2... и так далее.) Проблема в том, что таких файлов каждый день не мало, и сводить их в единый формат (разгрупировать, выделить пустые ячейки, вставить значения необходимые и тд и тп)  занимает много времени. Есть ли стандартные инструменты (pover qury/pivot..)? Возможно какие-то замысловатые формулы, или на худой конец макрос (желательно который сможет работать с любыми файлами)

Спасибо огромное.  
 
Вариант 1:
Вставляете в ячейку B4 формулу
Код
=ЕСЛИ(ЕЧИСЛО(C4)=ИСТИНА;C4;B3)

и протягиваете вниз. Эта формула проставит номер группы у каждой записи. Потом просто в столбце "С" фильтруете все цифры и удаляете их. В итоге остаются только записи наименований с присвоенным номером.

Вариант 2:
Вот Вам, на худой конец, макрос:
Sub ReGroup()

Код
Sub ReGroup()
Dim last As Double
last = Cells(Rows.Count, 3).End(xlUp).Row
    Application.ReferenceStyle = xlA1
    Cells.ClearOutline
    Range("B4:B" & last).FormulaR1C1 = "=IF(ISNUMBER(RC[1])=TRUE,RC[1],R[-1]C)"
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    Range("B3").AutoFilter
    ActiveSheet.Range("$B$3:B" & last).AutoFilter Field:=2, Criteria1:=">=0", _
    Operator:=xlAnd
    Rows("4:1000").Delete Shift:=xlUp
    ActiveSheet.ShowAllData
End Sub


Сохраняете его в личную книгу макросов и вперед)
Работать он, конечно, будет не с любыми файлами, как Вы желали, но со всеми файлами, которые имеют ту же структуру что и файл в примере
Изменено: Dyroff - 20.01.2020 22:28:32
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff,
Спасибо Вам за ответ, но к сожалению он не совсем подходит, так как группировка может быть не только по числу (может быть по слову, фразе, числовому выражению, символу), то есть число 1 может быть ООО Пупкин, число 2 может быть 27.ру и тд.  
 
Цитата
decebel2005 написал:
число 1 может быть ООО Пупкин, число 2 может быть 27.ру и тд.  

В первом сообщении Вы об этом решили умолчать и четко указали  по каким  параметрам должны группироваться данные
Цитата
decebel2005 написал:
Разгрупировать таблицу, поставщик 0-9
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
decebel2005, Не хватает входных данных для решения. Имеется ли список поставщиков отдельно ? Я к тому, что как-то надо понять - поставщик это или деталь.
Изменено: Veniamin Loginov - 21.01.2020 15:46:09
 
Список поставщиков/запчастей есть.
Суть вопроса моего наверное не совсем правильно озвучена/понята.
"Постащики"/"Цифры"/"Запчасти"/"Бренды"/"Явления погоды"/"Химические элементы"... и тд.. Это все может быть "шапкой группы" (сгруппировано), а подгруппой может выступать товар/документ/химическое соединение в котором есть какой-то элемент... Да все что угодно.  Когда мы убираем группировку, шапка остается, как строка или колонка (но непосредственно в моем случае интересует строка), а подгруппа - так же ничем не связанные строки. Мне же необходимо, чтобы эта самая "шапка" (группировка) после убирание "связи" падала в колонку рядом с подгруппой. То есть, если у нас связь  "Строка 2, колонка 2" - Это группа - Поставщик, а все что ниже в этой же колонки до 20 строки Это "ТОВАР", на 21 строке "Другой поставщик" -> 22-10000000 Товар купленный у второго поставщика... После разгруппировки - Поставщик должен попасть в колонку 1 и дублироваться со с троки 3 до строки 20. "Другой поставщик" в колонке 1 и строки 22 до строки 10000000 и тд..

Проблема в том, что не всегда может быть полный перечень "Шапок группировок", Необходимо каким-то образом привязаться именно к самой группировке... Чем больше думаю про такое, тем больше кажется, что это не реально :)

Извините за сумбур мысли
Изменено: decebel2005 - 21.01.2020 16:21:27
 
1)  У Вас на листе "Идеальный вариант" пустота
2) Откуда берется зеленый цвет шрифта? так выгружается, или Вы руками раскрашиваете его?
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff,

1. Поправил
2. В этом конкретном отчете выгружается так (разукрашенный). Если брать другие отчеты, то группировка может никак не выделяться.

Как вариант дополнительно файл "прайс-лист" идут группировки по:
1. Сезонность
2. Применяемость (легковые, грузовые, мото...)
3. Размерность

То есть - файл может быть абсолютно любым по наполнению/цвету. Единственное что схоже - "группировка"  
 
Ну вот еще вариант:
Создаете модуль туда пишете:
Код
Function УРОВЕНЬСТРОКИ(ЯЧЕЙКА As Range) As Long
    УРОВЕНЬСТРОКИ = ЯЧЕЙКА.Rows(1).OutlineLevel
End Function

Дальше на листе в ячейку B4  формулу:
Код
=ЕСЛИ(УРОВЕНЬСТРОКИ(C4)=1;C4;B3)

и протягиваете вниз.
Независимо от названий группы эта формула сначала определит уровень группировки а потом выведет название группы независимо от его вида

Дальше разберетесь и докрутите сами
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
написал:
Ну вот еще вариант:
Создаете модуль туда пишете:
Код
    [URL=#]?[/URL]       1  2  3      Function   УРОВЕНЬСТРОКИ(ЯЧЕЙКА   As   Range)   As   Long          УРОВЕНЬСТРОКИ = ЯЧЕЙКА.Rows(1).OutlineLevel    End   Function   
 
Дальше на листе в ячейку B4  формулу:
Код
    [URL=#]?[/URL]       1      =ЕСЛИ(УРОВЕНЬСТРОКИ(C4)=1;C4;B3)   
 
и протягиваете вниз.
Независимо от названий группы эта формула сначала определит уровень группировки а потом выведет название группы независимо от его вида

Дальше разберетесь и докрутите сами
ОГОНЬ!!! Сделал как описано, РАБОТАЕТ!!! Спасибо!!!
Страницы: 1
Наверх