ваши "мероприятия". Для моего варианта попробуйте заменить tbl = ... и далее на вот это
Код
tbl = Table.FromList(
List.Zip(
{
List.RemoveNulls(#"Удаленные Столбцы1"[Субконто]),
List.Alternate(#"Удаленные Столбцы1"[Сальдо на конец периода], 1, 1, 1),
List.Alternate(#"Удаленные Столбцы1"[Сальдо на конец периода], 1, 1)
}
),
(x) => x
)
in
tbl
Пришелец-прораб.
Перераспределение товара между складами
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
15.04.2026 15:54:00
vatuz23, добрый день. Вариант PQ. C именами столбцов в финальной таблице не заморачивался. Рез-т находится в последнем столбце ("К перемещению"). Если последние столбцы пустые (не нашли источник), то в "К перемещению" находится (нераспределенный) остаток первоначального запроса.
код
let // fx таблица -> в список поштучно fx_single = (tbl as table, col as text) as list => ((i) => List.TransformMany( Table.ToList(tbl, (w) => w), (x) => List.Numbers(0, x{i}), (x, y) => x ))(List.PositionOf(Table.ColumnNames(tbl), col)),
// fx загрузки таблиц и группировки по ГРП с сортировкой по кол-ву fx_load = (name, order_col) => Table.Group( Excel.CurrentWorkbook(){[Name=name]}[Content], "ГРП", {"r", (x) => Table.Sort(x, {order_col, Order.Descending})} ), // fx обработки 2 таблиц с одинаковым ГРП fx_calc = (tables) => [ // generator's step fx_step = (optional x) => [ s = if x = null then [demand = start_demand, supply = start_supply, delayed = {}] else x[next], demand_is_empty = List.IsEmpty(s[demand]), supply_is_empty = List.IsEmpty(s[supply]), demand_position = List.PositionOf(s[demand], s[supply]{0}, Occurrence.First, (c, v) => c{4} = v{4}), match_found = demand_position <> -1, next = if demand_is_empty then [] else if supply_is_empty then Record.TransformFields(s, {{"demand", List.Skip}, {"delayed", List.Skip}}) else if match_found then Record.TransformFields(s, {{"demand", (x) => List.RemoveRange(x, demand_position, 1)}, {"supply", List.Skip}}) else Record.TransformFields(s, {{"supply", List.Skip} , {"delayed", (x) => x & {s[supply]{0}}}}), out = if demand_is_empty then null else if supply_is_empty then s[demand]{0} & (s[delayed]{0}? ?? {}) else if match_found then s[demand]{demand_position} & s[supply]{0} else {} ], // generator's selector fx_out = (x) => x[out], // стартовые списки start_demand = List.Buffer(fx_single(tables{0}, "Берут")), start_supply = List.Buffer(fx_single(tables{1}, "Отдают")), // запускаем генератор poehali = List.Generate(fx_step, (x) => not x[demand_is_empty], fx_step, fx_out) ][poehali], ber = fx_load("ber", "Берут"), otd = Table.Buffer(fx_load("otd", "Отдают")), find_match = Table.AddColumn(ber, "otd", (x) => Table.Skip(otd, (z) => z[ГРП] <> x[ГРП]){0}?[r]?), go = Table.CombineColumns(find_match, {"r", "otd"}, fx_calc, "result"), tbl = Table.FromList(List.Combine(go[result]), (x) => x, 19, null), result = Table.SelectRows( Table.Group(tbl, List.FirstN(Table.ColumnNames(tbl), 13), {"К перемещению", Table.RowCount}), (x) => x[Column1] <> null ) in result
Изменено: - 15.04.2026 21:03:08
Пришелец-прораб.
Как разбить данные одного столбца на два в Power Query
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
14.04.2026 10:03:45
Татьяна Сухарева, доброе утро. Из первой колонки убираете пустые строки, из второй колонки берем цифры на четных и нечетных позициях (List.Alternate), склеиваем эти списки (List.Zip) и делаем из них таблицу.
код
let Source = Table.Buffer(Table.Skip(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content])), tbl = Table.FromList( List.Zip( { List.RemoveNulls(Source[Субконто]), List.Alternate(Source[Сальдо на конец периода], 1, 1, 1), List.Alternate(Source[Сальдо на конец периода], 1, 1) } ), (x) => x ) in tbl
Пришелец-прораб.
Найти 100% дублирование ассортимента, Найти полное совпадение количества товаров в разных магазинах.
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
09.04.2026 15:50:19
PQ
код
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], group_01 = Table.Group( Source, "Магазин", {"items", (x) => List.Sort(Table.SelectRows(x, (w) => w[Наличие товара на складе] <> 0)[Товар])}), group_02 = Table.Group( group_01, "items", { {"Магазины", (x) => Text.Combine(x[Магазин], ", ")}, {"qty", Table.RowCount} } ), result = Table.SelectRows(group_02, (x) => x[qty] > 1)[[Магазины]] in result
Пришелец-прораб.
Объединение строк (записей) в Power Query
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
03.04.2026 21:15:26
Yup, здесь нет никакого трюка. Как и написал выше, это группировка и операция(-и) с полученными в результате группировки таблицами. Прежде всего, матчасть: . Детальный разбор этой функции можно найти . А дальше - дело техники. Нам надо группировать строки по номеру, который "п/п". Это будет 2м агрументом Table.Group. Когда он не пуст - начинаем новую группу. С этим справятся 4й (GroupKind.Local) и 5й аргументы Table.Group. И теперь остается правильно составить 3й аргумент. Это список из элементов {название_столбца, функция_обработки_таблицы_группы} Нам надо получить все оригинальные столбцы, кроме первого (он уже получен как 2й аргумент). Это List.Skip(Table.ColumnNames(tbl)). Далее этот список надо преобразовать в то, что хочет от нас Table.Group в качестве 3го аргумента. Преобразование элементов списка - List.Transform. В каждом таком преобразовании получаем список из 2х элеметнов (см выше про 3й аргумент) - название столбца (собственно элемент списка) и функция преобразования соответствующего столбца таблицы. Чтобы доступиться к столбцу по имени используем Table.Column. В рез-те получается Text.Combine(Table.Column(имя_таблицы, имя_столбца)). То есть результатом работы Table.Group будет таблица с теми же названиями столбцов, что и оригинальная таблица, только значения в них будут "объединенные" при помощи Text.Combine текстовые значения. Вот и весь "трюк", описание которого заняло раз в 5 больше времени, чем написание кода.
Изменено: - 04.04.2026 09:11:20
Пришелец-прораб.
PQ. Фильтрация таблицы по условиям, Фильтр по дате в одном столбце и тексту в другм
воистину так. Начните с ознакомления с правилами общения на подобного рода форумах. Вот с этим, в частности
Цитата
4. Не рекомендуется 4.1. Создавать одинаковые темы или сообщения в разных форумах (cross-posting). Публикуя один и тот же вопрос в разных форумах и на дружественных сайтах вы заставляете сразу нескольких людей параллельно думать над вашей задачей и обесцениваете усилия тех, кто даст ответ вторым-третьим и т.д.
Пришелец-прораб.
Перенос значений из таблицы в таблицу
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
02.04.2026 19:54:32
Цитата
chebus2002 написал: Может мне надо каждый раз что-то в макросе менять? Напишите что пожалуйста.
а куда же "учитель" подевался? Вроде так успешно поучал всех ...
Пришелец-прораб.
Необходимо отсортировать столбец, имеется 4 символа
Выбрать из массива значения отличающиеся друг от друга на определенную величину (шаг), Поиск другого решения трудоёмкой прикладной специфической задачи
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
27.03.2026 11:22:12
еще вариант PQ.
код
let values = List.Buffer(Excel.CurrentWorkbook(){[Name="data"]}[Content][ЗНАЧЕНИЯ]), steps = List.Buffer(Excel.CurrentWorkbook(){[Name="steps"]}[Content][ШАГ]), first_row = #table(null, {List.Combine(List.Transform(steps, (x) => {"шаг " & Text.From(x), "кол-во"}))}), fx = (vals, step, s, optional c) => [ v = if c is null then vals{0}? else c + step, contains = List.Contains(vals, v), next = if contains then @fx(vals, step, s & {v}, v) else [ first = vals{0}?, count = List.Count(s), w = List.RemoveItems(vals, s), go = not List.IsEmpty(vals) ] ][next], proc = (step) => List.Generate( () => fx(values, step, {}), (x) => x[go], (x) => fx(List.Buffer(x[w]), step, {}), (x) => if x[count] = 1 then null else {x[first], x[count] - 1} ), run = List.Zip(List.Transform(steps, (x) => List.RemoveNulls(proc(x)))), tbl = first_row & Table.FromList( run, (x) => List.Combine(List.Transform(x, (w) => if w is list then w else {null, null}))
) in tbl
Изменено: - 29.03.2026 00:48:27(bug fixing)
Пришелец-прораб.
PQ не импортирует ВСЕ строки из источника
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
06.03.2026 11:13:10
Kate_k, можно попробовать пересохранить файл (Save As...). Или Open & Repair... Даже не знаю что еще можно посоветовать. А может файл можете сюда выложить?
Обработать исходник через PQ, Обработать исходник через PQ в правильную таблицу
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
26.02.2026 15:57:18
Цитата
Loksana написал: Или на каждый путь/файл отдельный запрос, а потом объединить?
Боже упаси! 1. Кладете все ваши файлы в отдельную папку 2. На основе моего кода делаете функцию с единственным параметром - бинарным содержимым файла. А именно, вот это нужно заменить параметром
Код
File.Contents("путь_к_файлу\Книга1.xlsx")
3. Читаете содержимое папки с помощью функции Folder.Contents (фильтром отберите только нужное - ваши файлы) 4. Применяете функцию из пункта (2) к столбцу Content: Table.TransformColumns(имя_таблицы_с_файлами, (x) => имя_вашей_функции(x[Content])) 5. Для сбора всего в одну таблицу делаете Table.Combine(имя_пункта_4[Content]) Вот . Только в конце вместо Table.ExpandTableColumn сделайте так, как я написал в пункте 5. Ведь Вам не нужны названия файлов или какие-то иные их атрибуты? Тем более, что имена столбцов в этих файлах могут быть разными.
Изменено: - 27.02.2026 11:38:49
Пришелец-прораб.
Обработать исходник через PQ, Обработать исходник через PQ в правильную таблицу
после чего? после обновления? Согласно сайту производителя, это самая свежая версия Volume licensed versions of Office LTSC 2021 ; February 10, 72026, Version 2108 (Build 14334.20522) И что же? Web.BrowserContents не появилась?
Пришелец-прораб.
Power Query Ошибка Expression.Error: Импорт Web.BrowserContents не соответствует ни одному из экспортов. Не пропущена ли ссылка на модуль?
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
18.02.2026 14:31:08
Цитата
dim.74 написал: Получается нужно просто обновить Excel?
Не зная версии программы, могу только посоветовать запустить обновление офисного пакета. Хотя, в случае с Excel for Mac, например, это не поможет.
Пришелец-прораб.
Сумма чисто раб. дней по диапазону дат, с сортировкой по людям и по месяцам.
только не надо к нему с кодом идти - контрпродуктивно. Достаточно "как есть - как надо". Ну и про вложенные скобки я бы сразу упомянул (есть они или нет) - кмк, важная деталь, наряду со степенью от 1 до 9.
а я заглянул и 100 раз пожалел об этом. Со вложенными скобочками (а вдруг!) пришлось повозиться. Может кто-то придумает что-то попроще, чем получилось у меня
PowerQuery объединение таблиц в разные столбцыы по ключу
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
14.02.2026 05:52:35
F.I.N., при группировке по коду преобразуйте таблицу в запись с полями имя_файла и значениями Количество продукта с помощью Record.FromList, например. А потом Table.ExpandRecordColumn с указанием списка всех имен файлов.
Пришелец-прораб.
Расчет часового расхода (воды), Фильтр по значениям
Пользователь
Сообщений: Регистрация: 10.01.2023
Excel 365
11.02.2026 22:24:11
Цитата
С.М. написал: то с 0 часов до 9:00 ничего не закачивалось - объём был постоянный,
Ну да, некоторые предприятия не работают по ночам.
Цитата
С.М. написал: а потом все 539 кубов ! за 1 минуту ! куда то слили
отвечает ТС
Цитата
mmakshakov написал: 3. Рассчитывается общее поступление воды на предприятие и суточное(обнуляется ежедневно в 11:00)