Макросы в Excel: что это и два способа записать макрос

Макросы в Excel: что это и два способа записать макрос Полезное

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

Ниже разберем, что именно называют макросом (термин многозначный, и это путает), какие два способа записать макрос есть в Excel и когда выбирать каждый, а также как не запустить вредоносный макрос и почему файл нужно сохранять в формате .xlsm.

Что делает макрос и кому он нужен

Идея простая: вы один раз описываете набор действий, а дальше Excel повторяет их сколько угодно раз без вашего участия. Это убирает ручную работу и человеческий фактор — опечатки, пропущенные строки, забытое форматирование.

Типичные задачи, которые закрывают макросами:
— привести десятки таблиц к единому виду (шрифт, числовой формат, границы);
— собрать сводный отчет из нескольких файлов по одному алгоритму;
— найти и перенести нужные ячейки в больших массивах данных;
— создать собственную функцию, которой нет в Excel по умолчанию.

Чаще всего макросы применяют те, кто много работает с таблицами: аналитики, экономисты, финансисты, менеджеры. Навык не обязателен для трудоустройства, но заметно экономит время на объемных однотипных операциях.

«Макрос» в разных смыслах: развели термины

Слово «макрос» встречается в разных областях и означает разные вещи. Эта статья — про офисный макрос (Excel и другие приложения Office). Чтобы не путать его с одноименными понятиями из программирования, сведем их в таблицу.

Где встречается Что называют «макросом» Пример Механизм
Excel и MS Office программа автоматизации действий в документе залить желтым ячейки со значением > 100 язык VBA
C / C++ текстовая подстановка препроцессором до компиляции #define SQUARE(x) ((x) * (x)) директива #define
Ассемблер шаблон, разворачиваемый в набор инструкций макрос вывода строки макроассемблер
Текстовые редакторы, утилиты запись и повтор последовательности нажатий макрос в Vim, AutoHotkey встроенный рекордер

Ключевое различие: офисный макрос — это исполняемая программа, которую запускает приложение во время работы. Макрос препроцессора C — не программа, а инструкция препроцессору заменить один текст другим до компиляции:

#define MAX_SIZE 100
#define SQUARE(x) ((x) * (x))

int arr[MAX_SIZE];      /* препроцессор подставит: int arr[100]; */
int y = SQUARE(3 + 1);  /* подставит: ((3 + 1) * (3 + 1)) = 16   */

Скобки вокруг x в SQUARE не случайны: без них SQUARE(3 + 1) развернулось бы в 3 + 1 * 3 + 1 = 7 из-за приоритета операций. Это упрощенный пример; у макросов C есть и другие тонкие места (побочные эффекты аргумента), поэтому в современном C++ вместо них чаще берут constexpr и inline-функции. Дальше в статье речь только про офисные макросы Excel.

Два способа записать макрос

Способа ровно два, и оба в итоге дают код на VBA — разница в том, кто его пишет:

  1. Записать действия макрорекордером — Excel сам переведет их в код VBA.
  2. Написать код вручную в редакторе VBA.

То есть макрорекордер не «альтернатива программированию», а генератор кода: вы кликаете по интерфейсу, а он записывает эквивалентный код. Понимание этого помогает читать и править записанный макрос вручную.

Признак Макрорекордер Написание на VBA
Нужны навыки нет нужны основы VBA
Кто пишет код Excel по вашим действиям вы сами
Условия и циклы не запишет доступны полностью
Работа с другими приложениями Office нет да (Word, Outlook, Access)
Когда выбрать разовая или линейная рутина сложная, ветвящаяся логика

Оба способа доступны на вкладке «Разработчик». По умолчанию ее нет на ленте, включить можно так: «Файл» -> «Параметры» -> «Настроить ленту» -> поставить галочку «Разработчик» в списке основных вкладок.

Способ 1: запись макрорекордером

Подходит новичкам и линейным задачам без условий. Порядок такой:

  1. Вкладка «Разработчик» -> группа «Код» -> «Запись макроса».
  2. В поле «Имя макроса» задать название (без пробелов, начинается с буквы).
  3. При желании назначить сочетание клавиш для запуска.
  4. В поле «Сохранить в» выбрать место: «Эта книга» (макрос доступен только в текущем файле) или «Личная книга макросов» (доступен во всех ваших книгах).
  5. Нажать «ОК» и выполнить нужные действия в таблице.
  6. Нажать «Остановить запись».

После этого Excel сохранит готовый код. Запустить макрос можно заданным сочетанием клавиш или через «Разработчик» -> «Макросы» -> «Выполнить». Записанный код выглядит примерно так:

Sub Formatirovanie()
' Макрос, записанный макрорекордером
    Selection.Font.Bold = True
    Selection.NumberFormat = "#,##0"
End Sub

Личная книга макросов — это отдельный скрытый файл (в современных версиях PERSONAL.XLSB), который Excel открывает при старте. Все, что в нем сохранено, доступно в любой книге на этом компьютере.

Способ 2: написание на VBA вручную

Дает полный контроль: условия, циклы, работу с несколькими приложениями. Порядок:

  1. Открыть редактор VBA: «Разработчик» -> «Код» -> «Visual Basic» или сочетание Alt + F11.
  2. В меню «Insert» выбрать «Module» — создать модуль для кода.
  3. Написать код и запустить его клавишей F5 (или «Run» на панели).

Полезная настройка: «Tools» -> «Options» -> вкладка «Editor» -> включить «Require Variable Declaration». Тогда в начало каждого модуля автоматически добавляется Option Explicit, и редактор требует объявлять переменные — это ловит опечатки в именах на этапе написания.

Минимальный рабочий макрос, который проходит по выделенным ячейкам и заливает желтым те, где число больше 100:

Option Explicit

Sub HighlightBigNumbers()
    Dim cell As Range
    ' Проходим по всем ячейкам выделенного диапазона
    For Each cell In Selection
        If IsNumeric(cell.Value) Then
            If cell.Value > 100 Then
                cell.Interior.Color = RGB(255, 235, 156) ' светло-желтая заливка
            End If
        End If
    Next cell
End Sub

Что произойдет: выделите диапазон с числами, запустите макрос (F5 в редакторе или из окна «Макросы») — все ячейки со значением больше 100 станут светло-желтыми, остальные не изменятся. Разберем ключевые строки:
— Dim cell As Range — объявляем переменную для ячейки;
— For Each ... Next — цикл по всем ячейкам выделения (Selection);
— IsNumeric — проверка, что в ячейке число, чтобы не сравнивать текст;
— Interior.Color с RGB(...) — задает цвет заливки.

Именно такую логику с условием и циклом макрорекордер записать не может — ее пишут руками.

Ограничения макрорекордера

Рекордер удобен, но у него есть жесткие границы. Он не запишет:
— условия и циклы (действие «если значение больше 100, то…»);
— операции без явного выбора ячейки — рекордер работает через выделение;
— обращение к другим приложениям Office (например, отправку письма через Outlook).

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

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

Макрос — это исполняемый код, поэтому файл с макросом от неизвестного отправителя потенциально опасен: вредоносный макрос может, например, менять или удалять данные. Правила гигиены простые:
— не включать макросы в файлах из непроверенных источников (почта, скачанные документы);
— держать защиту макросов в «Центре управления безопасностью» (Trust Center) на настройке по умолчанию;
— свои рабочие файлы хранить в доверенных расположениях.

Начиная с 2022 года Microsoft по умолчанию блокирует запуск VBA-макросов в файлах, скачанных из интернета (метка Mark of the Web): при открытии появляется предупреждение, и макрос не выполняется, пока пользователь явно не разрешит его для конкретного файла. Точное поведение зависит от версии и политик, поэтому проверяйте настройку для своего Office.

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

Выводы

  • Макрос в Excel — это программа на VBA, которая по одной команде повторяет заданную последовательность действий; так автоматизируют рутину с таблицами.
  • Термин многозначен: офисный макрос (VBA) — исполняемая программа, а макрос препроцессора C (#define) — текстовая подстановка до компиляции; это разные вещи.
  • Способа записи два, и оба дают код VBA: рекордер генерирует его по вашим действиям, вручную вы пишете сами; условия и циклы — только руками.
  • У макрорекордера жесткие границы: нет условий, циклов и работы с другими приложениями Office — для этого нужен ручной VBA.
  • Файл с макросом сохраняйте в .xlsm; макросы из непроверенных источников не включайте — это исполняемый код.

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

Макросы Excel — первый шаг к автоматизации рутины. Но у них есть потолок: VBA привязан к Office, тяжело масштабируется на большие данные и внешние источники (базы, API, веб). Когда однотипной обработки становится много и она выходит за пределы одной книги, ту же логику удобнее перенести на Python: чтение и запись Excel-файлов (openpyxl, pandas), обработка сотен таблиц, подключение к базам и сервисам. Логика та же, что в макросе — «пройти по данным, проверить условие, преобразовать», — но без ограничений VBA.

Освойте тему на практике

Освоить этот переход помогает курс Python для анализа данных: работа с таблицами, автоматизация обработки и анализ данных на практике. Посмотреть формат занятий и темы можно на открытых уроках — они бесплатные.

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

FAQ

Можно ли запустить макрос из другого файла Excel?
Да, если он сохранен в личной книге макросов (PERSONAL.XLSB) — тогда он доступен во всех книгах. Макрос из конкретного .xlsm работает, пока эта книга открыта.

Почему в файле пропали макросы после сохранения?
Скорее всего, книгу сохранили в формате .xlsx, который не хранит код. Пересохраните как .xlsm (книга с поддержкой макросов) и запишите макрос заново.

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

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