Power Query Продвинутый №26. Множественная замена текста c List.Accumulate и VBA
HTML-код
- Опубликовано: 6 окт 2024
- В этом уроке мы научимся делать множественную текстовую замену с помощью Power Query. Для этого мы воспользуемся функцией List.Accumulate. Также разберем как решить эту задачу при помощи VBA.
Файлы для спонсоров Boosty: boosty.to/comr...
Файлы для спонсоров ВК: comrade...
Файлы для спонсоров RUclips: • Post
Индивидуальное обучение: comrade-xl.ru/...
Страница урока на сайте: comrade-xl.ru/...
Файлы для спонсоров Boosty: boosty.to/comrade-xl/posts/64e47e93-9e56-40e7-b011-8380601b2c80?share=post_link
Файлы для спонсоров ВК: vk.com/comrade.excel?w=wall-185123800_184
Файлы для спонсоров RUclips: ruclips.net/user/postUgx1RSidhz6OfEEDaNB4AaABCQ
Индивидуальное обучение: comrade-xl.ru/pq-training/
Страница урока на сайте: comrade-xl.ru/2020/05/20/power-query-multiple-text-replacement-list-accumulate-vba/
Подписан, смотрю, учусь. Так держать, продолжайте в том же духе. Пополнил ряды спонсоров. Поддержим автора стаканом кофе в месяц.)
Большое спасибо за поддержку!
Одно из самых полезных видео на каналеУже протестировал и адаптировал код под свои данные))
Огромное спасибо,Тимур!)
Пожалуйста!
@@comrade_excel Кстати,данный код также адаптировал под поиск запрещенных символов)
В столбец найти вношу запрещённые символы а в столбец заменить служебное 'WARNING' далее настраиваю фильтр на содержит 'WARNING' и программа возвращает мне список с запрещенными символами)
Это очень круто, спасибо
9:03 Я решил проблему с порядком значений в таблице Замена1. В эту таблицу я добавил столбец "Длина строки" с формулой Text.Length([Найти]) и отсортировал по этому столбцу в порядке убывания. Теперь значения можно вставлять в произвольном порядке, не заморачиваясь с порядком.
А вот и долгожданное применение List.Accumulate(). Спасибо! Как всегда информативно и интересно. Но код уже не простой для восприятия; как же в PQ не хватает регулярок для таких целей...
А как же этот урок ruclips.net/video/MsvP4-NoX-k/видео.html
В нем тоже было про List.Accumulate.
@@comrade_excel Пропустил его, заметил только сейчас, спасибо) Кстати, насчёт Text.Format - он, вроде бы, сам трансформирует все из {...} в текст, специально можно не прописывать.
Добрый день,Тимур! то что ВЫ делаете это просто бомба, спасибо Вам, очень хотелось чтобы ВЫ записали видео про функцию List.TransformMany? это функция сложная очень и не понятная, заранее благодарю!
Добрый день! В будущем планирую видео на эту тему.
C недавних пор я стал совмещать VBA и PQ. Т.е., в файле находится кнопка запускающая макрос, работник указывает пути к исходным папкам/файлам и нажимает кнопку, макрос собирает данные, что-то дорабатывает и запускает обновление книги, тогда начинается основная работа в PQ. Можно сделать, что бы макрос подождал окончания обновлений и продолжил какую-то работу, но так пока не приходилось делать.
Здравствуйте Тимур, В первую очередь спасибо Вам за отличные курсы.
Скажите пожалуйста, в таблице "справочник" где находятся записи что на что менять, сколько максимум записей можно включать?
Спасибо за ранее 🥰👍
а как сделать перенос строки?
Здравствуйте! Подскажите, похожим методом можно заменять числовые значения?
Тимур, добрый вечер. Видео супер! Немного запутался, подскажите, пожалуйста, если в таблице [Замена_1] будет три столбца {+Добавить Маркировку} (таблица будет выглядеть так: [Замена_1,{Найти, Заменить, Добавить Маркировку}]), то как будет выглядеть формула в Шаге #Пользовательская (13 минута видео), если нужно добавить третий столбец из [Замена_1] рядом со столбцом Пользовательская. Именно без дополнительных шагов объединения и/или заранее объединения столбцов {Заменить, Добавить Маркировку}, а потом их разделения.... ведь точно есть более легкий способ...
Спасибо
Как выглядит этот третий столбец?
@@comrade_excel Доброе утро. На основании из приложенного примера(файл ПУСТОЙ) в Запрос ЗАМЕНА_1 добавим столбец (например, ДОБАВИТЬ МАРКИРОВКУ) можно ли в формулу сразу дописать добавление вот этого третьего столбца?
cloud.mail.ru/public/2NUX/5MwPEJGQ3
Извините, в ЗАМЕНУ_2 нужно было третий столбец вставлять (так как мы в ЗАМЕНЕ_1 quot & "" правим), но идея идентичная.
Добавлять столбец надо в отдельной формуле. Даже если можно и в этой, то это будет лишнее нагромождение. Вложенные функции лучше использовать только когда они простые. Здесь читаемо не получится.
@@comrade_excel Отдельная формула - это новый шаг, правильно? В отдельной формуле это уже через MERGE будет? Как тогда быть со скоростью загрузки (Table.Buffer), как ее оставить на том же уровне?
Мне VBA язык больше понятен чем язык М. Я бы в нем сделал.
Пытался внести изменения без добавления столбца, но не работает. Может в таких видео Вам лучше копировать столбец, а потом писать там код преобразования данных.
= Table.TransformColumns(#"Измененный тип", {{"Агент", each List.Accumulate(
List.Positions(Замена[Найти]),
[Агент],
(state, current)=>
Text.Replace(
state,
Замена[Найти]{current},
Замена[Заменить]{current}
))}})
Что не так?
Пишет не удается применить доступ в полях типа text.
Я в этом уроке делаю преобразование как в добавленном столбце, так и с заменой. Пересмотрите, скачайте мой решенный файл и сравните.
В List.Position поставьте вместо [Агент] знак нижнего подчёркивания. _
И все получится.