Зачем макросы и что такое 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 после макроса не работает. Копия файла перед запуском — обязательный ритуал.
Проверьте себя
1. Каждую неделю нужно из выгрузки посчитать сумму продаж по региону «Москва» за период. Что здесь правильнее?
AНаписать макрос на VBA, который в цикле пробегает все строки и складывает подходящие
BИспользовать формулу СУММЕСЛИМН — она пересчитается сама и понятна коллегам
CЗаписать макрос рекордером, потому что задача повторяется еженедельно
DСделать макрос и повесить его на кнопку, чтобы считать по нажатию
2. Вы запустили новый макрос, и он удалил не те строки. Что произойдёт при нажатии Ctrl+Z?
AExcel отменит все действия макроса как одно действие
BExcel отменит последнее действие макроса, остальные придётся отменять по одному
CНичего: запуск макроса очищает журнал отмены, вернуть данные через Ctrl+Z нельзя
DExcel предложит выбрать, какие действия макроса отменить