Мой макрос против пяти человек и двух недель: счёт 1:0 (и Word в нокауте)
Всё началось с того, что в компании надо было разослать долговые уведомления за коммунальные услуги. Каждому адресу - своё письмо. Внутри - таблица: номер квартиры, сумма долга. Плюс юридический текст про суд, приставов, арест на выезд и отключение света или воды.
Обычная такая бумажка, которую клеят на подъездную дверь и от которой у людей портится утро.
Задача выглядела невинно. А потом выяснилось, что это 218 населённых пунктов. От деревень до городов. И по каждому — адреса, квартиры, суммы. И эту задачу надо было делать ежеквартально.
На это дело выделили пять человек. Не потому, что работы так много. А потому что работы так много однообразной.
В первый квартал, они две недели сидели и делали одно и то же. Открыть Excel. Найти населённый пункт. Найти адрес. Создать страницу в Word. Вбить адрес. Вбить дату. Вбить таблицу с квартирами и суммами. Не забыть юридический блок. И так по кругу. Сотни раз.
К середине первой недели они уже разговаривали с таблицами. К концу второй - таблицы начали отвечать.
Как аналитик на следующий квартал я предложила написать макрос.
Мне сказали: «Пробуй». Я потратила один день - написала и протестировала.
Макрос делает всё то же самое, но за один запуск.
Он берёт данные из открытого Excel: населённый пункт, улица, дом, квартира, сумма долга. Сам группирует их по населённым пунктам и адресам. Сам создаёт для каждого населённого пункта отдельный Word-документ. Внутри — по странице на каждый адрес. На каждой странице — шапка, адрес, дата, таблица «квартира — долг» и весь юридический текст.
Нажимаешь кнопку. Идёшь пить чай. Возвращаешься - документы готовы.
Макрос не тупо перебирает строки. Он сначала строит в памяти дерево: населённый пункт → адрес → квартира → сумма. Как разложить бумаги по полочкам, прежде чем начать писать. Потом по этому дереву он просто идёт и собирает документы. Быстро и без суеты.
Отдельная история — дубли квартир. Две квартиры с одинаковым номером в одном доме? Да запросто. По-хорошему это технические ошибки, и разбираться с ними должны были операторы — сверять с ФИАС, искать потерянные буквы, разводить задвоенные записи руками. Но макрос решил иначе. Он не падает и ничего не теряет: молча помечает вторую квартиру суффиксом _1, и при выводе в документ пользователь это видит и может разобраться в причине задвоения.
И ещё момент - юридический текст. Весь этот блок про суд, приставов, пени и отключение света или воды собран в одну переменную. Если юристы решат что-то поменять (а они решат), правится в одном месте, а не в 218 документах.
А кстати - Word оказался вредным. При вставке текста он каждый раз сбрасывал выравнивание. Пришлось после каждого блока заново тыкать параметры. Немного нудно, но работает.
Ещё документ начинался с пустой страницы. Исправила условием: первый адрес - без разрыва, остальные - с разрывом. Мелочь, а бесила.
И третий момент - сохранение. Диалог сохранения вылезает для каждого населённого пункта. При 218 штуках - это 218 раз выбрать папку. Тут я, честно говоря, сама себя не похвалила. В следующей версии прописала папку пути автосохранения файлов, чтобы не мучить людей.
Один день разработки. ~ 400 человеко-часов рутины - минус.
Если пять человек две недели делают что-то вручную - это не значит, что так и должно быть. Это значит, что кто-то просто ещё не потратил один день на макрос.
Словари в VBA - недооценённая вещь. Трёхуровневая вложенность решает задачу группировки элегантнее, чем куча массивов и циклов.
И да, Word капризен. Но с ним можно договориться.
А у вас была задача, которую делали всей командой, а потом оказалось, что её закрывает одна кнопка?