Макрос — это заранее заданная последовательность, вызываемая одним коротким именем или сочетанием клавиш. Но за этим словом стоят две разные вещи: макрос как записанная последовательность действий (Excel, редактор, игра) и макрос как текстовая подстановка в коде (препроцессор C, ассемблер). Это разные механизмы с разным временем срабатывания, и путать их не стоит.
Содержание
Статья отвечает на вопрос, где и зачем применяют макросы: офис, редакторы кода, компиляторы, СУБД, игры, плюс автоматизации и риски безопасности. Как именно записать макрос в Excel — тема отдельной статьи (ссылка в конце), здесь про сценарии, а не про кнопку записи.
Два разных смысла слова «макрос»
Прежде чем перечислять области, разведем два семейства — иначе примеры покажутся противоречивыми.
| Семейство | Что такое «макрос» | Когда срабатывает | Где встречается |
|---|---|---|---|
| Макрос действий | записанная или назначенная последовательность действий | во время работы программы | Excel, Word, редакторы кода, игры |
| Макрос-подстановка | имя, которое разворачивается в текст или код | до или во время компиляции | препроцессор C/C++, ассемблер, шаблоны |
Проще говоря: макрос действий «нажимает кнопки за вас», а макрос-подстановка «дописывает код за вас» еще до запуска программы. Дальше разберем оба семейства по областям.
Макросы в офисе: Excel, Word и не только
Это самый массовый сценарий и первое, что ищут по слову «макрос». Здесь макрос — записанная последовательность действий над документом, которая повторяет рутину по нажатию кнопки: пересобрать отчет, отформатировать выгрузку, разнести данные по листам.
Кому это нужно: аналитикам, экономистам, бухгалтерам, менеджерам, маркетологам — всем, кто регулярно обрабатывает однотипные таблицы. Выигрыш — скорость и меньше ручных ошибок в повторяющихся шагах.
Технически офисные макросы Microsoft пишутся на VBA (Visual Basic for Applications) — языке, встроенном в приложения Office. Microsoft не развивает VBA новыми версиями, но он по-прежнему поставляется в настольном Office; для Excel в Microsoft 365 есть и более новый инструмент Office Scripts на TypeScript. В LibreOffice роль VBA играет LibreOffice Basic.
Небольшой макрос, который подсвечивает отрицательные числа в выделении — типичная офисная задача:
Sub HighlightNegatives()
Dim c As Range
For Each c In Selection
If IsNumeric(c.Value) And c.Value < 0 Then
c.Interior.Color = vbYellow ' желтая заливка ячейки
End If
Next c
End Sub
Граница применимости: офисный макрос удобен, пока задача живет в одном-двух файлах. Когда данных много, источников несколько или нужен воспроизводимый расчет по расписанию, аналитики переходят на Python — об этом в конце.
Макросы в редакторах кода и IDE
В редакторах слово «макрос» тоже означает запись действий, но уже над текстом. Классический пример — клавиатурные макросы в Vim (q) и Emacs: вы один раз выполняете правку, записываете ее и повторяете на десятках строк.
Близкое, но не тождественное — сниппеты и live templates в IDE (VS Code, JetBrains): по короткому триггеру разворачивается заготовка кода. Формально это не «запись действий», а подстановка шаблона, но пользователи часто называют такие заготовки макросами. Разница: клавиатурный макрос воспроизводит ваши нажатия, шаблон вставляет заранее описанный текст.
Область применения одна — убрать механическую однотипную правку: массовое переименование по образцу, оборачивание строк в теги, генерация типового блока кода.
Макросы препроцессора C и C++
Здесь макрос — это уже подстановка текста, а не действие. Директива #define говорит препроцессору: перед компиляцией заменить одно на другое. Применяют для именованных констант, коротких «функций» без вызова и условной компиляции под разные платформы.
Главная особенность и источник ошибок: препроцессор работает как текстовая замена, он не знает про приоритет операций. Поэтому макрос-«функцию» без скобок легко сломать:
#include <stdio.h>
#define SQR_BAD(x) x * x // плохо: нет скобок
#define SQR(x) ((x) * (x)) // хорошо: скобки защищают подстановку
int main(void) {
printf("%d\n", SQR_BAD(1 + 2)); // развернется в 1 + 2 * 1 + 2
printf("%d\n", SQR(1 + 2)); // развернется в ((1 + 2) * (1 + 2))
return 0;
}
Фактический вывод:
5
9
SQR_BAD(1 + 2) дает 5, а не 9: текст подставился буквально, и умножение выполнилось раньше сложения. Версия со скобками возвращает ожидаемые 9. Отсюда практика: в современном C++ для таких задач чаще берут constexpr-функции и const, а макросы оставляют для условной компиляции и того, что функцией не выразить.
Макросы ассемблера
В ассемблере макрос — именованный шаблон, который разворачивается в несколько инструкций на этапе ассемблирования. Он убирает копипаст повторяющихся кусков: например, «сохранить два регистра» одной строкой вызова.
%macro save2 2 ; имя save2, 2 параметра (синтаксис NASM)
push %1
push %2
%endmacro
; вызов "save2 rax, rbx" развернется в две инструкции push
Это не подпрограмма: тело макроса встраивается в каждое место вызова, вызова по адресу нет. Синтаксис отличается по ассемблерам (NASM, MASM, GAS), поэтому конкретную запись сверяйте с документацией своего инструмента.
Макросы в СУБД
Здесь надо быть точным: в большинстве массовых СУБД (PostgreSQL, MySQL, SQL Server) для многократно используемой логики применяют хранимые процедуры и функции, а не «макросы». Слово «макрос» встречается в конкретных продуктах и в разном смысле.
Примеры: макросы Microsoft Access — последовательности действий, задаваемые без кода, для форм и отчетов; в Teradata есть объект MACRO — сохраненный параметризованный набор SQL-команд. В инженерии аналитики популярны макросы dbt на шаблонизаторе Jinja — они генерируют SQL перед выполнением, то есть работают как подстановка, а не как хранимая процедура. Точный синтаксис и наличие механизма зависят от конкретной СУБД — проверяйте по ее документации.
Макросы в играх
В играх макрос — это назначенная на клавишу или кнопку мыши последовательность действий: серия ударов, розжиг способностей по порядку, повтор рутинных операций в ремесле или фарме. Реализуют их через ПО игровых мышей и клавиатур или через сторонние программы вроде AutoHotkey.
Важная оговорка: многие игры в пользовательском соглашении запрещают автоматизацию и макросы, дающие преимущество, а античит-системы могут расценить их как нарушение с риском блокировки. Правила отличаются от игры к игре, поэтому решение зависит от конкретного соглашения — это не универсально разрешенный прием.
Плюсы автоматизации и риски безопасности
Общий плюс всех макросов один: убрать повтор. Записанная рутина выполняется быстрее и стабильнее ручной, снижает число механических ошибок и освобождает время на содержательную работу. Но у офисных макросов есть обратная сторона — они несут исполняемый код, а значит, могут быть вектором атаки.
| Риск | В чем суть | Как снижают |
|---|---|---|
| Макровирусы | вредоносный VBA внутри документа выполняется при открытии | не включать макросы в файлах из почты и интернета |
| Фишинг «включите макросы» | документ уговаривает нажать «Разрешить содержимое» | Microsoft с 2022 по умолчанию блокирует макросы из интернета в поддерживаемых версиях Office |
| Игровые макросы | автоматизация против правил игры | сверять с пользовательским соглашением, помнить про риск бана |
Практический вывод: макросы из недоверенных источников по умолчанию не запускать. Для рабочих файлов из внутренних источников — хранить в доверенных расположениях и держать защиту на уровне «включать осознанно», а не «разрешить все».
Выводы
- Слово «макрос» означает разные вещи: запись действий (офис, редакторы, игры) и текстовую подстановку в коде (препроцессор C, ассемблер) — это разные механизмы.
- Самая массовая область — офисная автоматизация рутины над таблицами и документами на VBA, Office Scripts или LibreOffice Basic.
- В коде макросы разворачиваются до или во время компиляции:
#defineв C — текстовая замена, макросы ассемблера встраивают инструкции по месту. - В СУБД «макрос» — продуктовое понятие (Access, Teradata, dbt); чаще логику хранят в процедурах и функциях.
- Главный риск — макровирусы и фишинг через офисные документы; не включать макросы в файлах из недоверенных источников.
Где применяется / связь с практикой
Офисный макрос — естественная первая ступень автоматизации: аналитик убирает ручные шаги в Excel и экономит часы. Но когда данных становится много, источников несколько, а расчет нужно повторять регулярно и воспроизводимо, VBA упирается в потолок — и рутину переносят на Python с библиотеками для работы с таблицами.
Освойте тему на практике
Этот переход разбирают на курсе Python для аналитики данных: от автоматизации выгрузок до анализа. Посмотреть формат и темы вживую можно на открытых уроках — они бесплатные.
Смежные темы: Макросы: описание и способы записи, СУБД: области применения и описание, Программный код: описание и области применения.
FAQ
Макрос и скрипт — это одно и то же?
Нет. Скрипт — самостоятельная программа-сценарий, а макрос обычно живет внутри приложения-хозяина (Excel, редактора, игры) и запускается его средствами. Офисный макрос при этом действительно пишется на языке сценариев (VBA), но исполняется в среде приложения.
Макрос препроцессора и офисный макрос — это про одно?
Нет, это разные механизмы. Макрос #define в C — текстовая замена до компиляции, он не «выполняет действия»; офисный макрос — это выполнение записанной последовательности действий во время работы программы.
Можно ли считать безопасным любой файл с макросами?
Нет. Опасны не сами макросы, а исполняемый код из недоверенного источника. Файлы с макросами из почты и интернета не стоит запускать с включенными макросами — именно так распространяются макровирусы.



