Взгляд НСИ на VBA в Excel и не только
Салют! На связи Владимир. Тружусь инженером по нормативно-справочной информации (НСИ) в компании Bimeister.
Хочу поделиться с вами опытом работы с Excel и рассказать, как можно ускорить выполнение рутинных задач при работе с составлением наименований согласно нормативно-технической документации (НТД).
От простого к сложному
Терпения… Автоматизация при помощи VBA начнется чуть позже, а сейчас я хочу рассказать, как при помощи обычного выпадающего списка можно повысить эффективность работы в Excel.
Суть работы:
Имеем шаблон с проработанными данными для загрузки в систему. Проработка шаблона включает в себя множество рутинных задач:
- Ввод однотипных наименований материалов в шаблон;
- Подготовка шаблона для загрузки в систему (удаление лишних вкладок в книге, форматирование таблицы, проверка введенных данных на корректность);
- Проверка на соответствие с данными в нормативно-технической документации (НТД).
Шаблон для загрузки
Для унификации материалов нашими специалистами был создан файл примеров ранее заведенных материалов, который хранится в облачном хранилище.
Файл примеров
Рутина заключается в том, что файл приходилось постоянно открывать, копировать данные, искать материалы, а кто-то и вовсе мог на облаке удалить пример наименования материала.
Так как файл хранится в облачном хранилище, почему бы не подгружать данные из файла примеров прямо в сам шаблон для загрузки? Для этого воспользуемся силой Power Query.
Для начала создадим ещё один лист в шаблоне под названием «Примеры».
На вкладке «Данные» нажимаем «Получить данные». Далее «Из других источников» и финальный аккорд «Из интернета».
Прошу обратить внимание, что конечный путь на файл заканчивается только форматом самого файла «.xlsx». При наличии параметра в ссылке на файл «?web=1» его следует удалить.
После ввода ссылки на файл появится окно Power Query, где мы жмем на кнопку «Загрузить». И вот уже появляются подгруженные данные из облачного хранилища.
В свойствах запроса листа «Примеры» советую поставить галочку на «Обновление при открытии файла». Также можно обновлять данные с заданным Вам диапазоном времени. В моем случае достаточно каждых 60 минут.
И вот самое интересное: по итогу мы получаем лист в шаблоне, который имеет актуальные данные. В шаблоне на вкладке «Данные» находим кнопку «Проверка данных» и выбираем необходимый столбец с наименованиями листа «Примеры».
Обязательно на ракурсе «Сообщение об ошибке» убрать галочку «Выводить сообщение об ошибке», чтобы можно было редактировать наименование примера.
Результат
Мы получаем перечень материалов в выпадающем списке, который можно редактировать, но самое удобное – искать материалы можно в самой ячейке. А сам файл примеров теперь защищен паролем и редактирует его только один человек, который и вносит актуальные данные.
Подготовка шаблона к импорту в систему
Суть рутины заключается в том, что необходимо каждый раз в Excel:
- Удалять ненужные листы при импорте шаблона;
- Сохранять шаблон в формате «.xlsx»;
- Переводить введенные данные в формат «умной» таблицы;
- Удалять комментарии, внесенные во время работы в шаблоне;
- Проверять на корректность введенных данных (Лишние пробелы в наименовании элементов, проставлены ли обязательные условия для импорта: количество элементов, единица измерения, подкласс и др).
Решить данную проблему помог VBA, который одним нажатием решает все 5 задач, указанных выше. Далее указан конечный вариант и шаблон, заполненные специально с «косяками».
Из рисунка видно, что пропущено количество элементов в столбце «E» и единица измерения в столбце «F». После нажатия на макрос появится окно с предупреждением.
В случае ошибок пропущенных значений также появится окно с предупреждением.
Как видим, макрос удалил ненужные нам комментарии напротив фланцев, лишние вкладки и выделил те ячейки, которые необходимо заполнить. Также определил последнюю заполненную ячейку и по ней форматировал введенные данные в «умную» таблицу.
Немного кода
В качестве примера приведу функцию, которая во время сохранения шаблона проверяет незаполненные ячейки в столбце «Е», написанные для классов «99_00_Элементы спецификаций». Остальные функции схожи по написанию синтаксиса кода.
Доверяй, но проверяй
Каждый день специалист НСИ работает с НТД, проводит сверку значений (например, размеров деталей) в документации заказчика с указанными в ней стандартами.
Невозможно запомнить все НТД. Для этого каждый раз приходится открывать ГОСТы и сверять значения, а под конец рабочего дня глаз может «замылиться», и можно допустить довольно глупую ошибку.
Макрос «Проверить_НТД» работает следующим образом: проверяет, находится ли в столбце «D» необходимый нам ГОСТ, к примеру, пусть это будет ГОСТ 8732-78, в случае нахождения значения, в столбец «С» напротив проверяемого элемента указывается комментарий о совпадении или о том, что по данному ГОСТу изготовление отсутствует, также предусмотрен вариант того, что данного размера и вовсе нет в НТД.
Также наглядно видно, как теперь при использовании вышеописанного макроса «Сохранить шаблон», он просто удалит все ненужные нам комментарии при подготовке шаблона к загрузке.
Сам код:
Покажу работу кода на примере тех же самых труб по ГОСТ 8732–78.
В нашем шаблоне на листе «Доп.сведения» скопирована таблица из открытых источников с размерами труб по ГОСТ 8732-78.
Чуть дальше по коду будет ещё один пример того, что использование функции значительно облегчает работу.
Функция CheckPipes принимает на вход 3 параметра: диапазон проверки Dn (диамтер), S (толщина) трубы и имя НТД.
Далее определяем последнюю использованную ячейку в столбце «D» для нахождения проверяемого НТД. Если переменная совпадает, то в массив данных Arr присваиваются разбитые значения, но для этого пришлось написать ещё одну функцию «Numbers», которая извлекает из текста только числа и разделяет их символом «х».
В массив под индексом «0» присвоено значение Dn трубы, а под индексом «1» толщина стенки трубы.
Так как при присваивании значений переменных «Dn1Arr» и «S1Arr» типа Variant «,» меняется на «.», и добавляется лишний пробел. Используем метод Replace и Trim чтобы избавиться от ненужных символов.
А далее всё просто: пробегаемся при помощи цикла по проверяемому диапазону и при совпадении «Dn» и «S» из таблицы используем метод Intersect, который возвращает значение при пересечении двух диапазонов.
И вот, самое главное для тех, кто дочитал...
Как использование функций в макросах упрощает код в дальнейшем?
Мы видим, ниже в макросе нам остается самое простое – присвоить диапазон проверки для переменных и указать в параметрах функции сам НТД.
Выводы
Зачем это всё вам?
Я думаю, что мой опыт может быть кому-нибудь полезен. Например тем, кто только хочет начать изучать VBA. VBA - это не так уж и сложно, в отличие от других языков программирования, но он позволит сделать вашу жизнь в работе с Excel, намного легче.
Теги: