Макрос в 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 — разница в том, кто его пишет:
- Записать действия макрорекордером — Excel сам переведет их в код VBA.
- Написать код вручную в редакторе VBA.
То есть макрорекордер не «альтернатива программированию», а генератор кода: вы кликаете по интерфейсу, а он записывает эквивалентный код. Понимание этого помогает читать и править записанный макрос вручную.
| Признак | Макрорекордер | Написание на VBA |
|---|---|---|
| Нужны навыки | нет | нужны основы VBA |
| Кто пишет код | Excel по вашим действиям | вы сами |
| Условия и циклы | не запишет | доступны полностью |
| Работа с другими приложениями Office | нет | да (Word, Outlook, Access) |
| Когда выбрать | разовая или линейная рутина | сложная, ветвящаяся логика |
Оба способа доступны на вкладке «Разработчик». По умолчанию ее нет на ленте, включить можно так: «Файл» -> «Параметры» -> «Настроить ленту» -> поставить галочку «Разработчик» в списке основных вкладок.
Способ 1: запись макрорекордером
Подходит новичкам и линейным задачам без условий. Порядок такой:
- Вкладка «Разработчик» -> группа «Код» -> «Запись макроса».
- В поле «Имя макроса» задать название (без пробелов, начинается с буквы).
- При желании назначить сочетание клавиш для запуска.
- В поле «Сохранить в» выбрать место: «Эта книга» (макрос доступен только в текущем файле) или «Личная книга макросов» (доступен во всех ваших книгах).
- Нажать «ОК» и выполнить нужные действия в таблице.
- Нажать «Остановить запись».
После этого Excel сохранит готовый код. Запустить макрос можно заданным сочетанием клавиш или через «Разработчик» -> «Макросы» -> «Выполнить». Записанный код выглядит примерно так:
Sub Formatirovanie()
' Макрос, записанный макрорекордером
Selection.Font.Bold = True
Selection.NumberFormat = "#,##0"
End Sub
Личная книга макросов — это отдельный скрытый файл (в современных версиях PERSONAL.XLSB), который Excel открывает при старте. Все, что в нем сохранено, доступно в любой книге на этом компьютере.
Способ 2: написание на VBA вручную
Дает полный контроль: условия, циклы, работу с несколькими приложениями. Порядок:
- Открыть редактор VBA: «Разработчик» -> «Код» -> «Visual Basic» или сочетание Alt + F11.
- В меню «Insert» выбрать «Module» — создать модуль для кода.
- Написать код и запустить его клавишей 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.



