Зачем макросы и что такое VBA
Разбираемся, что такое макрос и VBA простыми словами, и учимся отличать рутину, которую стоит автоматизировать, от той, которую трогать не надо.
Макрос — последовательность действий в Excel, записанная так, что её можно повторить одним нажатием. VBA (Visual Basic for Applications) — встроенный в Office язык программирования, на котором эта последовательность и записана.
Рутина, которая съедает часы
Знакомая картина. Каждый понедельник Ирина из бухгалтерии выгружает из учётной системы отчёт по продажам. Дальше начинается ритуал: удалить три служебные строки сверху, переименовать колонки по-человечески, превратить даты из текста в даты, убрать лишние пробелы в названиях контрагентов, отфильтровать возвраты, покрасить шапку, поставить автофильтр, сохранить под именем с датой. Сорок минут. Каждую неделю.
Сорок минут в неделю — это почти 35 часов в год. Полная рабочая неделя, потраченная на то, чтобы двигать одни и те же ячейки одними и теми же движениями. Причём это скучно, а скучные задачи люди делают с ошибками: где-то не тот фильтр, где-то съехала строка, где-то забыли пересчитать.
Вот на этом месте и появляются макросы. Excel умеет запомнить вашу последовательность действий и повторять её сколько угодно раз — быстрее и без «человеческого фактора».
Макрос — это ваши действия, записанные словами
Главное, что мешает людям без программистского опыта подойти к макросам, — ощущение, что «код» это что-то инопланетное. На самом деле код макроса — это просто те же самые ваши действия, только записанные текстом.
Вот кусочек настоящего макроса, который делает часть той самой понедельничной работы:
Sub CleanReport()
' удалить три служебные строки сверху
Rows("1:3").Delete
' колонка D — это даты, показать их как даты
Columns("D").NumberFormat = "dd.mm.yyyy"
' включить автофильтр на шапке
Range("A1").AutoFilter
End Sub
Прочитайте вслух: «удалить строки с 1-й по 3-ю», «у колонки D формат числа — день.месяц.год», «на ячейке A1 включить автофильтр». Всё. Это не магия, это ваши же клики, переведённые на английский.
Sub CleanReport() — это заголовок макроса, CleanReport — имя, по которому вы его потом запустите. End Sub — конец. Строки, начинающиеся с апострофа ', — комментарии: Excel их игнорирует, они написаны для человека.
Что такое VBA и откуда он взялся
VBA (Visual Basic for Applications) — язык, встроенный в Microsoft Office ещё в девяностых. Он живёт внутри вашего файла: код хранится прямо в книге Excel, а не отдельной программой на диске. Отправили файл коллеге — макросы уехали вместе с ним.
VBA есть не только в Excel: он же работает в Word, Outlook, Access и PowerPoint. Именно поэтому макрос из Excel может, например, сам отправить письмо через Outlook — это одна и та же экосистема.
Чего стоит не путать:
- VBA — это не Visual Basic .NET. Названия похожи, языки разные. Ищите в поиске именно «VBA», иначе получите нерабочие советы.
- VBA не работает в Excel Online (в браузере). В настольном Excel для Windows — работает полностью; в Excel для macOS — почти полностью, но часть возможностей (например, работа с Windows-специфичными вещами) недоступна.
- VBA — не единственный способ автоматизации. И часто не лучший.
Вот честная табличка, чтобы вы понимали, где вы находитесь:
| Инструмент | Для чего он хорош | Где ломается |
| Формулы | Расчёты внутри таблицы, которые пересчитываются сами | Не умеют создавать файлы, красить, отправлять письма |
| Сводные таблицы | Быстрая агрегация и срезы | Не чистят данные, не делают действия |
| Power Query | Загрузка и чистка данных из файлов и баз, повторяемое обновление | Не управляет самим Excel: не печатает, не рассылает, не рисует |
| VBA | Любые действия: собрать 30 файлов из папки, разослать письма, напечатать, показать диалог, проверить данные по правилам | Требует .xlsm, не работает в браузере, код надо поддерживать |
Простое правило: формулы считают, Power Query готовит данные, а VBA — делает действия. Если задача формулируется глаголом («собрать», «разослать», «переименовать», «проверить и подсветить»), это территория VBA.
Что автоматизировать стоит, а что нет
Самая дорогая ошибка новичка — автоматизировать то, что автоматизировать не надо. Прежде чем открывать редактор, прогоните задачу через три вопроса.
1. Она повторяется?
Посчитайте окупаемость честно, в минутах. Задача занимает 20 минут и делается раз в неделю — это 17 часов в год. Если вы потратите 4 часа на макрос, он окупится за три месяца. А задача на 15 минут, которая случится ровно один раз, не окупится никогда — сделайте её руками и забудьте.
2. Она стабильна?
Макрос — исполнитель без фантазии. Он делает ровно то, что записано. Если каждый раз выгрузка приходит с разным числом колонок, а названия листов зависят от настроения коллеги, макрос будет ломаться чаще, чем помогать. Сначала договоритесь о стабильном формате источника, потом автоматизируйте.
3. Её точно не решает формула?
Классическая беда: человек пишет макрос, который в цикле бегает по 5000 строкам и складывает суммы по условию. А это одна формула:
=СУММЕСЛИМН(C:C; A:A; "Москва"; B:B; ">=01.01.2026")
Формула пересчитается сама, её поймёт любой коллега, её нельзя «забыть запустить». Макрос здесь — это шаг назад.
Итого: зелёный и красный списки
| Стоит автоматизировать | Не стоит |
| Еженедельная чистка выгрузки по одним и тем же правилам | Разовая задача «на один раз» |
| Собрать 40 файлов из папки в одну таблицу | То, что решается формулой или сводной |
| Сформировать и разослать 60 персональных писем | Задача, где каждый раз новые правила |
| Проверить данные по чек-листу и подсветить нарушения | Решения, где нужен человеческий выбор и ответственность |
| Напечатать/сохранить 30 отчётов в PDF по шаблону | Регулярная загрузка и чистка данных — это лучше делает Power Query |
Как это работает
Внутри Excel всё устроено как матрёшка объектов. Приложение (Application) содержит книги (Workbook), книга содержит листы (Worksheet), лист содержит диапазоны ячеек (Range). У каждого объекта есть свойства (например, у ячейки — значение, цвет, формат) и методы (действия: удалить, скопировать, отсортировать).
Когда вы кликаете мышкой, интерфейс Excel незаметно дёргает эти же самые объекты. Кнопка «Полужирный» на ленте — это на самом деле Range.Font.Bold = True. Макрос просто обращается к объектам напрямую, минуя кнопки. Отсюда и его скорость: ему не нужно рисовать интерфейс, прокручивать экран и ждать вашу руку.
Отсюда же следует важное свойство, которое вас однажды спасёт (или укусит): действия макроса нельзя отменить через Ctrl+Z. Запустили макрос, который удалил не те строки, — журнал отмены очищен, назад дороги нет. Поэтому железное правило: перед первым запуском нового макроса — сохраните копию файла.
Частые ошибки
- Автоматизировать бардак. Если источник данных кривой, макрос просто ускорит производство кривых отчётов. Сначала порядок в данных, потом код.
- Писать макрос там, где хватает формулы. 300 строк VBA вместо
СУММЕСЛИМН— это не мастерство, это лишняя работа и лишняя точка отказа. - Запускать макрос без резервной копии. Ctrl+Z не спасёт. Скопируйте файл, потом жмите «Выполнить».
- Копировать код с форума, не понимая ни строчки. В лучшем случае он не заработает, в худшем — отформатирует не тот лист (а бывает и хуже — об этом в уроке про безопасность).
- Не оставлять описания. Через полгода вы сами не вспомните, что делает
Макрос1и на каких данных его можно запускать. Комментарии в коде — это не для красоты.
Итоги
- Макрос — записанная последовательность действий; VBA — язык, на котором она записана и который живёт внутри файла Office.
- Excel устроен как дерево объектов:
Application → Workbook → Worksheet → Range. Макрос обращается к ним напрямую, минуя мышь. - Формулы считают, Power Query готовит данные, VBA делает действия. Задача-глагол — повод для макроса.
- Автоматизируйте только то, что повторяется и стабильно. Разовое и переменчивое — руками.
- Ctrl+Z после макроса не работает. Копия файла перед запуском — обязательный ритуал.