Здравствуйте. Есть огромный прайс-лист (фрагмент в приложенном примере), данные в котором сгруппированы в блоки вида: ПРОИЗВОДИТЕЛЬ 1 Модель 1 Размер 1 модели 1 Размер 2 модели 1 ... Размер N модели 1 Модель 2 Размер 1 модели 2 ... Размер N модели 2 ПРОИЗВОДИТЕЛЬ 2 и т.д.
Всю голову сломал как сделать макрос, который из этой таблицы делал бы обычную плоскую вида: ПРОИЗВОДИТЕЛЬ 1Модель 1Размер 1 модели 1 ПРОИЗВОДИТЕЛЬ 1Модель 1Размер 2 модели 1 ... ПРОИЗВОДИТЕЛЬ 1Модель 1Размер N модели 1 ПРОИЗВОДИТЕЛЬ 1Модель 2Размер 1 модели 2 ... ПРОИЗВОДИТЕЛЬ 1Модель 2Размер N модели 2 ПРОИЗВОДИТЕЛЬ 2Модель 1Размер 1 модели 1 и т.д.
Единственное, что приходит в голову - как то использовать при создании плоской таблицы факт, что ячейки с названием производителя, модели и размера имеют разную заливку. Но как? Или это по другому как-нибудь сделать? Прошу помощи.
Здравствуйте. Есть огромный прайс-лист (фрагмент в приложенном примере), данные в котором сгруппированы в блоки вида: ПРОИЗВОДИТЕЛЬ 1 Модель 1 Размер 1 модели 1 Размер 2 модели 1 ... Размер N модели 1 Модель 2 Размер 1 модели 2 ... Размер N модели 2 ПРОИЗВОДИТЕЛЬ 2 и т.д.
Всю голову сломал как сделать макрос, который из этой таблицы делал бы обычную плоскую вида: ПРОИЗВОДИТЕЛЬ 1Модель 1Размер 1 модели 1 ПРОИЗВОДИТЕЛЬ 1Модель 1Размер 2 модели 1 ... ПРОИЗВОДИТЕЛЬ 1Модель 1Размер N модели 1 ПРОИЗВОДИТЕЛЬ 1Модель 2Размер 1 модели 2 ... ПРОИЗВОДИТЕЛЬ 1Модель 2Размер N модели 2 ПРОИЗВОДИТЕЛЬ 2Модель 1Размер 1 модели 1 и т.д.
Единственное, что приходит в голову - как то использовать при создании плоской таблицы факт, что ячейки с названием производителя, модели и размера имеют разную заливку. Но как? Или это по другому как-нибудь сделать? Прошу помощи.Neuro75
Привет! После решения нескольких подобных задач остановился на таком: одинаковости форматов перевожу в отступы, а для отступов написал оснастку для перевода в плоскую.
Привет! После решения нескольких подобных задач остановился на таком: одинаковости форматов перевожу в отступы, а для отступов написал оснастку для перевода в плоскую.InExSu
Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
let Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], #"Транспонированная таблица" = Table.Transpose(Источник), #"Заполнение вниз" = Table.FillDown(#"Транспонированная таблица",{"Column1"}), #"Объединенные столбцы" = Table.CombineColumns(#"Заполнение вниз",{"Column1", "Column2"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None)," "), #"Очищенный текст" = Table.TransformColumns(#"Объединенные столбцы",{{" ", Text.Trim, type text}}), #"Транспонированная таблица1" = Table.Transpose(#"Очищенный текст"), #"Повышенные заголовки" = Table.PromoteHeaders(#"Транспонированная таблица1", [PromoteAllScalars=true]), #"Добавлен индекс" = Table.AddIndexColumn(#"Повышенные заголовки", "Индекс", 0, 1), #"Сгруппированные строки1" = Table.Group(#"Добавлен индекс", {"Level"}, {{"tab", each _, type table}}), #"Сведенный столбец" = Table.Pivot(Table.TransformColumnTypes(#"Сгруппированные строки1", {{"Level", type text}}, "ru-RU"), List.Distinct(Table.TransformColumnTypes(#"Сгруппированные строки1", {{"Level", type text}}, "ru-RU")[Level]), "Level", "tab"), fn=(a as table, b as any,c as text,d as text, f as any,optional e as list) as table =>let g = Table.AddIndexColumn(a, "Индекс", 0, 1), h=Table.AddColumn(g, b&"+1",each try Record.Field(g{[Индекс]+1},b) otherwise null) , i=Table.ColumnNames(Record.Field(g{0},d)){0}, e=if e is null then {i,"Индекс"} else e, f=List.ReplaceValue(List.ReplaceValue(e, i, f, Replacer.ReplaceText), "Индекс", c, Replacer.ReplaceText), j=Table.ExpandTableColumn(h, d, e, f), k=b&"+1", l=try Table.SelectRows(j, each (Record.Field(_,c) > Record.Field(_,b) ) and (if Record.Field(_,k) is null then true else Record.Field(_,k)>Record.Field(_,c))) otherwise j in Table.RemoveColumns(if b<>"" then l else j,List.RemoveItems({b,"Индекс",k},{""})), expand=fn(fn(fn(#"Сведенный столбец","","i1","2","Категория"),"i1","i2","3","Производитель"),"i2","i3","4","Модель"), expand1=fn(expand,"i3","i4","5","Размер",Table.ColumnNames(#"Сведенный столбец"{0}[1])), result=Table.RemoveColumns(expand1,{"1","Level","i4"}) in result
[/vba]
еще один вариант в PowerQuery с допстолбцом
Код
получить.ячейку(28)
[vba]
Код
let Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], #"Транспонированная таблица" = Table.Transpose(Источник), #"Заполнение вниз" = Table.FillDown(#"Транспонированная таблица",{"Column1"}), #"Объединенные столбцы" = Table.CombineColumns(#"Заполнение вниз",{"Column1", "Column2"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None)," "), #"Очищенный текст" = Table.TransformColumns(#"Объединенные столбцы",{{" ", Text.Trim, type text}}), #"Транспонированная таблица1" = Table.Transpose(#"Очищенный текст"), #"Повышенные заголовки" = Table.PromoteHeaders(#"Транспонированная таблица1", [PromoteAllScalars=true]), #"Добавлен индекс" = Table.AddIndexColumn(#"Повышенные заголовки", "Индекс", 0, 1), #"Сгруппированные строки1" = Table.Group(#"Добавлен индекс", {"Level"}, {{"tab", each _, type table}}), #"Сведенный столбец" = Table.Pivot(Table.TransformColumnTypes(#"Сгруппированные строки1", {{"Level", type text}}, "ru-RU"), List.Distinct(Table.TransformColumnTypes(#"Сгруппированные строки1", {{"Level", type text}}, "ru-RU")[Level]), "Level", "tab"), fn=(a as table, b as any,c as text,d as text, f as any,optional e as list) as table =>let g = Table.AddIndexColumn(a, "Индекс", 0, 1), h=Table.AddColumn(g, b&"+1",each try Record.Field(g{[Индекс]+1},b) otherwise null) , i=Table.ColumnNames(Record.Field(g{0},d)){0}, e=if e is null then {i,"Индекс"} else e, f=List.ReplaceValue(List.ReplaceValue(e, i, f, Replacer.ReplaceText), "Индекс", c, Replacer.ReplaceText), j=Table.ExpandTableColumn(h, d, e, f), k=b&"+1", l=try Table.SelectRows(j, each (Record.Field(_,c) > Record.Field(_,b) ) and (if Record.Field(_,k) is null then true else Record.Field(_,k)>Record.Field(_,c))) otherwise j in Table.RemoveColumns(if b<>"" then l else j,List.RemoveItems({b,"Индекс",k},{""})), expand=fn(fn(fn(#"Сведенный столбец","","i1","2","Категория"),"i1","i2","3","Производитель"),"i2","i3","4","Модель"), expand1=fn(expand,"i3","i4","5","Размер",Table.ColumnNames(#"Сведенный столбец"{0}[1])), result=Table.RemoveColumns(expand1,{"1","Level","i4"}) in result