Макросы: где и зачем применяются

Макросы: где и зачем применяются Про IT

Макрос — это заранее заданная последовательность, вызываемая одним коротким именем или сочетанием клавиш. Но за этим словом стоят две разные вещи: макрос как записанная последовательность действий (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 — текстовая замена до компиляции, он не «выполняет действия»; офисный макрос — это выполнение записанной последовательности действий во время работы программы.

Можно ли считать безопасным любой файл с макросами?
Нет. Опасны не сами макросы, а исполняемый код из недоверенного источника. Файлы с макросами из почты и интернета не стоит запускать с включенными макросами — именно так распространяются макровирусы.

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