Основы использования макросов в Excel: запись, VBA и запуск

Основы использования макросов в Excel: запись, VBA и запуск Полезное

Макрос в Excel — это записанная последовательность действий, которую программа сохраняет в виде кода на языке VBA (Visual Basic for Applications) и повторяет по одной команде. Проще говоря, вы один раз показываете Excel, что нужно сделать, а дальше он повторяет это сам: по кнопке, сочетанию клавиш или при открытии файла. Ниже разберём, как записать макрос макрорекордером, как выглядит код на VBA, где макросы хранятся и как их безопасно запускать. Опыта в программировании не требуется, достаточно уверенно работать в Excel.

Как работает макрос: запись и запуск

У любого макроса два этапа жизни: сначала его создают (записывают действия или пишут код), потом запускают. При записи Excel сам переводит ваши клики и ввод в текст программы на VBA. При запуске он выполняет этот текст сверху вниз — строка за строкой. Создать макрос можно двумя способами:

  • Макрорекордер — Excel записывает ваши действия и сам превращает их в код. Подходит новичкам и для простых повторяющихся операций.
  • Ручное написание кода на VBA — вы пишете программу сами в редакторе Visual Basic. Нужно, когда логику нельзя «показать мышью»: условия, циклы, диалоги.

Оба способа дают процедуру, которую Excel умеет запускать. Часто их комбинируют: записывают заготовку макрорекордером, а затем дорабатывают код руками.

Подготовка: вкладка «Разработчик»

Инструменты для макросов лежат на вкладке «Разработчик», по умолчанию она выключена. Чтобы её включить: «Файл» -> «Параметры» -> «Настроить ленту» -> поставить флажок «Разработчик» -> «ОК». Появится вкладка с кнопками «Запись макроса», «Макросы» и «Visual Basic».

Запись макроса макрорекордером

Разберём на примере: макрос выбирает ячейку A2 и вписывает в неё текст «Excel».

  • Вкладка «Разработчик» -> «Запись макроса».
  • Задать имя без пробелов (например VvodExcel), при желании — сочетание клавиш. В поле «Сохранить в» оставить «Эта книга», нажать «ОК» — с этого момента Excel пишет всё, что вы делаете.
  • Выбрать ячейку A2, ввести Excel, нажать Enter.
  • Нажать «Остановить запись».

Готово. Если открыть редактор VBA (кнопка «Visual Basic» или Alt+F11), в модуле окажется такой код:

Sub VvodExcel()
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "Excel"
    Range("A3").Select
End Sub

Фактический результат запуска: в ячейку A2 записывается текст Excel, курсор переходит на A3. Больше макрорекордер ничего не делает — он повторяет ровно записанное.

Важная особенность: макрорекордер фиксирует каждое действие, включая лишние. Случайный клик не туда тоже попадёт в код. Поэтому последовательность лучше отрепетировать заранее, а длинную задачу разбить на несколько коротких макросов.

Основы VBA: из чего состоит макрос

VBA — это встроенный в Office язык программирования. Знать его целиком не нужно, но базовую структуру макроса стоит понимать, чтобы читать и править код. Любой макрос-процедура начинается с оператора Sub и заканчивается End Sub, между ними — тело: команды, которые выполняются по очереди. Минимальный рабочий пример:

Sub Privet()
    MsgBox "Привет, Excel!"
End Sub

Результат: на экран выводится окно с текстом «Привет, Excel!» и кнопкой «ОК». MsgBox — встроенная функция показа сообщений.

Пример с циклом — его макрорекордер сам не запишет. Макрос заполняет ячейки A1:A5 числами от 1 до 5:

Sub ZapolnitNomera()
    Dim i As Integer
    For i = 1 To 5
        Cells(i, 1).Value = i
    Next i
End Sub

Результат: в столбце A появляются значения 1, 2, 3, 4, 5. Здесь Dim i As Integer объявляет счётчик, Cells(i, 1) — обращение к ячейке по строке i и столбцу 1 (это A), а For ... Next повторяет команду пять раз.

Ошибки: как выглядят и как чинить

Начинающие чаще всего спотыкаются на обращении к листу по имени. Ошибка тройкой: неверный код -> результат -> исправление. Неверный код (лист называется «Лист1», а в коде — «Отчёт»):

Sub NaList()
    Sheets("Отчёт").Range("A1").Value = 100
End Sub

Фактический результат: выполнение прерывается, VBA показывает окно Run-time error '9': Subscript out of range. Excel не нашёл лист с таким именем.

Исправление — обращаться к существующему листу (точное имя) либо к активному:

Sub NaList()
    ActiveSheet.Range("A1").Value = 100
End Sub

Теперь в A1 текущего листа записывается 100. Правило: имена листов, книг и диапазонов в коде должны совпадать с реальными — до буквы.

Пользовательские функции (UDF)

На VBA можно создавать собственные функции, работающие прямо в ячейках, как встроенные. Отличие от макроса: функция начинается с Function, принимает аргументы и возвращает значение, но не меняет другие ячейки. Пример — расчёт НДС:

Function NDS(summa As Double, Optional stavka As Double = 0.2) As Double
    NDS = summa * stavka
End Function

После сохранения в ячейке можно написать =NDS(1000) и получить 200 (при ставке 20%). Ставку удобно вынести в аргумент: =NDS(1000; 0,22) вернёт 220 — одна функция под разные ставки без правки кода.

Где хранятся макросы

Код живёт не «в ячейках», а в программных модулях книги. Их видно в окне Project Explorer редактора VBA (Ctrl+R, если оно скрыто):

  • Обычный модуль («Insert» -> «Module») — основное место для макросов и функций, сюда попадает большинство кода.
  • ЭтаКнига (ThisWorkbook) — для макросов, привязанных к событиям книги: открытие, сохранение, закрытие.
  • Модуль листа — для событий конкретного листа: изменение ячейки, выбор диапазона.
  • Личная книга макросов (PERSONAL.XLSB) — скрытая книга, открывающаяся вместе с Excel. Её макросы доступны во всех файлах — удобно для универсальных инструментов.

Безопасность: формат .xlsm и настройки макросов

Макросы — это исполняемый код, поэтому у Excel есть защита. Важны два момента.

Первое — формат файла. Обычный .xlsx макросы не хранит: сохранив книгу с кодом в .xlsx, вы их потеряете. Файлы с макросами сохраняют в формате .xlsm (книга с поддержкой макросов) или, реже, .xlsb.

Второе — настройки запуска: «Файл» -> «Параметры» -> «Центр управления безопасностью» -> «Параметры центра управления безопасностью» -> «Параметры макросов». Рекомендуемый по умолчанию вариант — «Отключить макросы VBA с уведомлением»: код не запускается сам, но при открытии файла появляется панель с кнопкой «Включить содержимое».

Отдельно: файлы с макросами из интернета или почты Excel по умолчанию блокирует полностью (вместо кнопки «Включить» — предупреждение о заблокированном источнике). Это защита от вредоносных макросов, поэтому запускать чужой код стоит только из доверенных источников.

Способы автоматизации: что выбрать

Макрорекордер и ручной VBA — не единственные инструменты. Когда какой способ уместен:

Способ Когда использовать Плюсы Минусы
Макрорекордер Простые повторяющиеся действия, которые легко «показать мышью» Не нужен код, быстро Не умеет условия и циклы, пишет лишнее
VBA вручную Логика с условиями, циклами, диалогами, обработкой ошибок Полный контроль, любые задачи Нужно освоить язык
Power Query Загрузка, чистка и объединение данных из разных источников Без кода, обновляется по кнопке Не для действий над интерфейсом
Office Scripts Автоматизация в Excel для веба и связка с Power Automate Работает в облаке, язык TypeScript Нет в офлайн-версии, отдельный язык

Выводы

  • Макрос — это сохранённая последовательность действий в виде кода VBA, которую Excel повторяет по одной команде; создать её можно записью или вручную.
  • Макрорекордер подходит для простых операций и сам генерирует код, но не умеет условия и циклы — их пишут на VBA.
  • Любой макрос — это блок от Sub до End Sub; имена листов и диапазонов должны точно совпадать с реальными, иначе будет Run-time error '9'.
  • Файлы с макросами сохраняют только в формате .xlsm; в обычном .xlsx код теряется.
  • Безопасность включена по умолчанию: код не запускается сам, а файлы из интернета блокируются — запускайте только доверенные макросы.

Где применяется / связь с практикой

Навык автоматизации полезен далеко за пределами таблиц. Аналитики автоматизируют сбор отчётов, бухгалтеры — расчёты и выгрузки, а понимание того, как макрос обращается к данным и повторяет операции, — первый шаг к работе с базами данных. Логика «описать процесс -> формализовать -> повторять по команде» одинакова и для макроса, и для запроса к БД.

Если хочется системно освоить работу с данными и требованиями, посмотрите курс «Системный аналитик. Basic»: там разбирают, как формализовать процессы и работать с данными — Excel-макросы к этому удобная подготовка. А чтобы оценить формат без обязательств, начните с бесплатных вебинаров — на них можно вживую посмотреть, как устроена работа аналитика.

Смежные темы: Макросы: описание и лучшие приложения для них, СУБД: определение и лучшие приложения.

FAQ

Можно ли отменить действие макроса через Ctrl+Z?
Нет, изменения макроса из истории отмены не откатываются. Перед запуском незнакомого макроса сохраните копию файла.

Почему при открытии файла с макросами появляется жёлтая панель с предупреждением?
Это штатная защита: Excel не запускает код автоматически. Если файл из доверенного источника, нажмите «Включить содержимое» — для файлов из интернета кнопки может не быть, тогда источник нужно разблокировать в свойствах файла.

Обязательно ли учить VBA, чтобы пользоваться макросами?
Нет. Для простых повторяющихся действий хватает макрорекордера. VBA нужен, когда появляются условия, циклы или диалоги, — то есть логика, которую нельзя просто «показать мышью».

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)