Разработка макроса для переноса данных из трех сводных таблиц (по единой базе данных) с созданием отдельного файла для каждого варианта фильтрации с название организации
Добрый день. Прошу рассмотреть ТЗ и дать предложения. Из-за ограничений форума ссылка для скачивания файла примера и видео текущего процесса - https:// disk. Если что-то внизу неточно - напишите.
Техническое задание (ТЗ) на разработку VBA-макроса для Excel --- # 1. Цель Автоматизация процесса фильтрации данных по организациям, сведение показателей и сохранение фильрации в отдельный файл. --- # 2. Текущий процесс пользователя 1. Выбор организации: Вручную применяет фильтр по столбцу выбирая одну организацию. 2. Фильтрация данных: Данные фильтруются по предустановленным критериям в срезах на листе "Слияние 1 мес". 3. Расчет показателей: - Количество исследований по каждой модальности берется в столбце N с листа "Слияние 1 мес"→ записывает в столбец D на листе «Приложение 1». внешнего файла. Название создаваемого файла должно совпадать с названием выбранной организации в срезе. Шапка файла формируется по отдельному шаблону (пример есть в каталоге \\3.Exports) - Номенклатура (организация) и количество исследований без дозы по модальности → записывает в столбец A и B на листе «Приложение 1» внешнего файла. 4. Сохранение файла: Сохраняет файл с именем выбранной организации. 5. Переход к следующей организации: Повторяет шаги 1-4 для новой организации. --- # 3. Требования к макросу ## 3.1. Входные данные. - Лист "Слияние 1 мес" с исходными данными по нескольким срезам одной базы данных: - Срез «Месяц заключения» и "Head MO" может изменяться - Столбец с названием организации при выборе в срезе выводится в → A, строка 25. (можно использовать для имени файла) Вывод во внешний файл - Лист «Приложение 1» создаваемый для сохранения данных в отдельном файле с перенесенными данными по выбранной МО:
Вид исследования
Число пустых полей, шт.
Доля от общего числа исследований, %
Общее число исследований, шт.
- Столбец А → переносится вид исследования взятый из столбца I (начиная со строки 10 и названием модальности) - Столбец B → количество исследований без дозы из листа "Слияние 1 мес" столбца B (со строки B10) по соответствующей модальности (например,КТ, ПЭТ итд те всех тех, что есть в предыдущем пункте начиная с I10 - Столбец C → расчет % от строки (например =B5/D5) в формате Х,Х% - Столбец D → данные по каждой модальности и общее количество исследований из столбца N листа с исходными данными Далее - на строке 13 шапка таблицы по шаблону
Головная медицинская организация
Медицинская организация
Модель аппарата
Вид исследования
Название исследования
Номер исследования в ЕРИС ЕМИАС
Статус исправления
(пример файла есть в каталоге \\3.Exports )
## 3.2. Логика работы макроса 1. Получить выбранную организацию: - Определить активный фильтр в столбце организаций (столбец A) или по срезу. - Если фильтр не применен → вывести ошибку: *«Организация не выбрана»*.
2. Применить фильтры и рассчитать показатели: - Общее количество исследований: Количество отфильтрованных строк (исключая заголовок). - Исследования без дозы определяются выбранными срезами на листе ": "Статус доз" -> "2.Еэфф не внесена" и "CCT CODE" -> 96094 3. Экспорт в лист «Приложение 1»: - Использовать шапку как в файла в папке //3.Exports/ - Записать данные: - Столбец A → название организации. - Столбец B строки с 5 по 10 → количество исследований без дозы. - Столбец D строки с 5 по 10 → общее количество исследований. - Столбец A по F со строки 14 → заполнение данными из листа с исходными данными по выбранной, Головная медицинская организация, Медицинская организация, Модель аппарата, Вид исследования, Название исследования, Номер исследования. - Сохранить структуру названия модальностей (КТ, ПЭТ итд) как было в листе исходных данные по столбцу I, при отсутствии данных без дозы оставлять "0" для количества исследований.
4. Сохранение файла: - Сохранить рабочую книгу с данными как: "Приложение 1 - [Название организации].xlsx" - Формат имени: Удалить запрещенные символы (например, “,”,\, /, *, ?). 5. Действия по фильтру по среза с Организацией: - не сбрасывая фильтр, дождаться через 10 секунд выбора новой организации и пройти по ней цикл снова. При этом более 1 раза не проходить цикл с уже выбранной организацией. ## 3.3. Выходные данные - Лист «Приложение 1» с добавленными данными, очищаемый и перезаписываемый новыми данными. - Отдельный файл Excel для каждой организации. --- # 4. Требования к обработке ошибок 1. Проверка активного фильтра: - Если фильтр не выбран → сообщение: *«Выберите организацию!»*. 2. Проверка листа «Приложение 1»: - Если лист отсутствует → создать автоматически. 3. Контроль дубликатов: - При сохранении файла, если имя существует → добавить суффикс (например, _1). --- # 5. Интеграция - Запуск макроса: Через кнопку на панели инструментов Excel, сочетание клавиш (например, Ctrl+Shift+R), в идеале вынести кнопку рядом со срезом МО --- # 6. Тестовые данные - Как на видеофрагменте и подкаталогах примеров по ссылке. --- # 7. Нефункциональные требования 1. Производительность: Обработка до 50 000 строк за ≤ 10 сек. 2. Совместимость: Excel 2016 и выше. --- # 8. Дополнительные условия - Макрос должен сохранять исходные данные без изменений. - Логирование ошибок в отдельный файл (если возможно). ---
Доброго времени суток. В листе "Table 2" хочется видеть в виде "Table2 (ожидаемый)" c аналогичной шапкой, полным текстом приложения и дополнительной ссылкой на каждое приложение. Но внутри на странице которую парсится есть ссылка на еще одну страницу с полным приложением. Нужно его достать как то.
Конечно устраивает периодический запуск. Иначе же не понять экселю, что инфо в буфере поменялась Сделаю быструю кнопку на включение и выключение работы макроса.
Извините, не подходит. Можно наверное сделать переменную связанную с буфером обмена и анализировать отличаются ли данные от предыдущего значения из буфера. При отличии в значении - выполнять внесение в ячейку. Сделать могу до 4 знака после разделителя и они всегда будут отличатся от прошлого.
Здравствуйте! Прощу помощи. Макрос VBA должен срабатывать при появлении новой информации в буфере обмена из стороннего приложения. В буфер из приложения приходит 1 строка из 2х столбцов. В 1ом цифры (положительные или отрицательные) с разделителем в виде точки или запятой (в зависимости от локали). Второй столбец с любым текстом необходимо отбросить. При приходе информации состоящей из других данных (не их 1 строки и 2 столбцов) - ничего автоматически не вставлять из буфера обмена в активную ячейку. После вставки новой пришедшей инфо из буфера обмена в активную на текущий момент ячейку (при нахождении курсора в столбцах D-Q на активном листе всех листов книги) необходимо переместить активную ячейку вниз на 1 строку и ожидать поступления новых данных из буфера обмена. При невыполнении условия нахождения текущей выбранной ячейки в диапазоне - ничего не вставлять. Макрос необходимо выполнять на активном листе книги (при нахождении курсора в столбцах D-Q) при появление новых данных в буфере примерно раз в 10-20 сек. То что в файле - как работает сейчас при ручной вставке из буфера обмена. Спасибо.
Добрый день. Прошу помощи. Макрос должен срабатывать при появлении новой информации в буфере обмена из стороннего приложения. В буфер из приложения приходит 1 строка из 2х столбцов. В 1ом цифры с разделителем в виде точки или запятой. (от локали). Второй столбец можно отбросить. После вставки новой пришедшей инфо из буфера обмена в активную на текущий момент ячейку (для столбцов D-Q) курсор необходимо переместить вниз на 1 строку. Если выделяется какая-то другая ячейка (например что-то кроме столбцов D-Q) на этом или соседнем листе, то ничего не должно происходить пока не придут новые данные в буфер обмена и курсор не будет в диапазоне столбцов D-Q. Появление новых данных в буфере примерно раз в 10-20 сек. Спасибо.
Alien Sphinx написал: при вызове какой функции? Ваш запрос МДН DL у меня отработал корректно.
При вызове функции fn_DecompressFiles в последнем столбце запроса ожидается, что из папки с zip из каждого файла обработается файл Таблица дозовых нагрузок.csv (UTF- Может функция с ошибками? - https://comrade-xl.ru/2021/01/23/pq-tricks-zip-file/
ниже запрос МДН DL
Код
let
Источник = Folder.Files(Excel.CurrentWorkbook(){[Name="Полный_путь"]}[Content]{2}[Путь к данным]),
#"Строки с примененным фильтром" = Table.SelectRows(Источник, each ([Extension] = ".zip")),
#"Другие удаленные столбцы" = Table.SelectColumns(#"Строки с примененным фильтром",{"Name", "Content"}),
#"Вызвана настраиваемая функция" = Table.AddColumn(#"Другие удаленные столбцы", "fn_DecompressFiles", each fn_DecompressFiles([Content], null, "Таблица дозовых нагрузок.csv", null))
in
#"Вызвана настраиваемая функция"
Всем доброго дня! Прошу помощи. Вроде указываю название файла при вызове функции, но в результате null. Необходима выгрузка из папки с несколькими архивами zip, файла с одинаковым названием и сформированать файл с единой шапкой
БМВ, спасибо огромное. Это то что нужно. Где об этом приеме с делением диапазонов можно почитать? Хочу разобраться. PS: Книга от Николая Павлова - есть.
Егор Чернов, спасибо. Вроде же так просто. А я подумал о каком-то другом условии внутри АГРЕГАТ.
updata: К сожалению, это не то. Мне нужно чтобы в ячейке проводился расчет квартиля с исключением из выборки ячеек не удовлетворяющих условию (в столбце $C>50). А код выше вообще не считает если условие не выполняется.
Добрый день. Прошу помочь советом, необходимо в формуле ячейки D2= АГРЕГАТ(17;3;D5:D4999;3) добавить условие учета ячеек по столбцу $D только при наличии числа элементов по строке в столбце $C более 50 (отметил желтым). Пример во вложении.
Павел с Востока \Ʌ/, все же вышло несколько не то. При вводе граничного значения кВ - первый вариант не выбирает крайнее значение К. А второй вариант не производит линейную интерполяцию, а выбирает ближайшие фиксированные значения по таблице.
Всем привет. В п.3 выбирется значение в выпадающем меню. в п.4 вносится значение кВ. В таблице по указанным выше значениям с помощью интерполяции ищется нужное значение коэффициента перехода и считается значение в п.5. Пока получилось сделать интерполяцию по первой строке из п.3 Помогите как сделать автоматический поиск коэфициента перехода по всей таблице при выборе в п.3 Спасибо.
Доброго дня. Нужно разобрать файлы в каталоге DATA и обработать все вкладки 2100, 2200, 2300, 2400, 3100, 3200, Форма РГП в едином файле из корня. Как должно примерно выглядеть отражено во вкладках "3-ДОЗ Свод.xlsx". (Посчет отражен желтым)
Суммарные значения во вкладках 2100,2200,2300,2400,3100,3200 - не посчитаны. Остались данные от старых сводных таблиц.
Во вкладке "ср.дозы взр." пустые ячейки тоже замазаны. Их возможно не красить? Возможно есть способ через стиль ссылок RC, СМЕЩ, ИНДЕКС добраться до заполнения по аналогии условным форматированием для соседних ячеек в этой же таблице?
В файле примера во вкладке 2200 в столбце N нужно пометить оранжевым, если в столбце М есть рассчитанные суммарные значения. В том же столбце c gjvjom. УФ уже подсвечивается красным если значения столбца N больше M. Для примера в столбце О выделил оранжевым нужные строки.
На вкладке "ср.дозы взр." в столбце D нужно пометить УФ красным цветом значения менее столбца S и больше столбца T . Если данных нет в столбце D - красным ячейка не помечается. Для примера в столбце М выделил красным нужные строки.
gling, спасибо. Я думал там должна была быть какая-то другая формула. Мне видимо нужно для себя самого разложить формулу из сообщения #12 с его сумм и макс
gling, близко ( но все равно выделяются ячейки которые корректно заполнены в обеих вкладках 2100 и 2200. К примеру графа 4. все значения есть но все равно отмечены цветом. При корректном заполнении ничего красить не нужно в 2100, 2200, ср дозах. 6 и 12 графы заливаются корректно. Спасибо, еще бы с 4 графом разобраться. )
Ячейки заполняются только цифрами. в двух разных вкладках будут разные цифры. Нужно контролировать что для одной ячейки введены данные в обеих вклажках. Насчет пробелов и текста - введено ограничение на пробелы и текст. С 0 в 2200 все вроде нормально и заливать более не нужно.
Михаил Л, Выкладываю новую версию xls (97-2003) с поддержкой УФ на разных листах через именованные диапозоны. (К сожалению нужно соблюдсти совместимость с 2003 версией) Попробую еще раз расписать алгоритм, тк в файлах выше он некорретно работает при верном заполнении данными.
2100 и 2200 заполняются разными данными, нужно контролировать заполение обеих ячеек по вкладкам. Чтобы не пропустить заполения всех нужных ячеек в обеих вкладках необходимо подсвечивать только те ячейки которые не имеют пары в соседней вкладке. К примеру: Если есть заполнение в 2100 столбца 6, в 2200 столбец 6 также заполнен данными - то выделять их не нужно. Если в 2100 заполнен столбец 7, но пусто в 2200 то подствечивать данные ячейки и в 2100 и в 2200. Если в 2200 заполнен столбец 8, но пусто в 2100 то подствечивать данные ячейки и в 2100 и в 2200. Так сделать со всеми ячейками из именнованных диапозонов в 2100 и 2200
На листе ср.дозы взр. подсвечивать ячейку если только не заполнены данные по ней в 2100 и 2200. Если соответсвующие ячейки заполнены и в 2100 и в 2200 то закрашивать в данной вкладке ячейку не требуется.