Производство по чертежам Подбор аналогов Цены производителя Оригинальная продукция в короткие сроки
INNERпроизводство и поставка промышленных комплектующих и оборудования
Бесплатно Личный кабинет — избранное и расчёты ★ Регистрация →
Новинка Симуляторы и тренажёры — ЧПУ, допуски, ПИД Попробовать →
Правовая информация →

INNER
Контакты

Макросы VBA для инженерных задач

  • 14.07.2026
  • Познавательное

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

Python и Excel для инженера

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

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

Правило простое: если операцию приходится повторять руками более нескольких раз, её стоит превратить в макрос.

Есть два способа получить код: записать действия макрорекордером или написать вручную в редакторе. На практике их сочетают — записывают заготовку, затем дорабатывают её циклами и условиями.

Содержание статьи

Запись макроса: быстрый старт без кода

Запись макроса (макрорекордер) переводит действия пользователя в код VBA. Это лучший способ и автоматизировать простую операцию, и увидеть, каким кодом описывается то или иное действие.

  1. Включите вкладку «Разработчик». Файл → Параметры → Настроить ленту → отметьте «Разработчик» (Developer).
  2. Запустите запись. Вкладка «Разработчик» → «Записать макрос». Задайте имя (без пробелов и спецсимволов, не с цифры).
  3. Выполните действия. Проделайте нужную операцию в таблице — рекордер запишет каждый шаг.
  4. Остановите запись. «Разработчик» → «Остановить запись».
  5. Сохраните книгу. В формате «Книга Excel с поддержкой макросов» (.xlsm) — иначе код не сохранится.

У записи есть предел: рекордер фиксирует конкретные действия с конкретными ячейками, но не умеет ветвлений и повторов по переменному числу строк. Всё, что требует «пройти по всем строкам таблицы» или «сделать, только если условие», добавляют вручную в редакторе.

Кнопка «Относительные ссылки» на вкладке «Разработчик» переключает запись в режим смещений относительно активной ячейки — полезно, когда макрос должен работать не от фиксированного адреса, а от текущего положения курсора.

Наверх

Редактор VBA: где живёт код

Редактор VBA (Visual Basic Editor, VBE) — отдельное окно, где хранится и правится код. Открывается сочетанием Alt+F11 или кнопкой «Visual Basic» на вкладке «Разработчик». Записанный макрорекордером код попадает в модуль, который виден в редакторе.

Элемент редактораНазначение
Project ExplorerДерево книг и объектов (листы, модули, формы). Вызов — Ctrl+R
Модуль (Module)Контейнер, куда пишут и куда записывается код макросов
Окно кодаСобственно редактор текста программы
Immediate WindowОкно отладки; вывод через Debug.Print. Вызов — Ctrl+G
Properties WindowСвойства выбранного объекта. Вызов — F4

Новый модуль добавляют через меню Insert → Module. Запуск макроса — клавиша F5, пошаговое выполнение для отладки — F8 (построчно, с остановками). Ручная запись даёт то, чего рекордер не умеет: циклы, условия, работу с переменным числом строк.

VBA — первый макрос
Sub Привет()
    ' простейший макрос: сообщение на экране
    MsgBox "Макрос запущен"
End Sub
Наверх

Обращение к ячейкам: Range и Cells

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

Range("B2")
Ячейка по адресу; Range("B2:D10") — диапазон
Cells(2, 2)
Ячейка по номеру строки и столбца (строка 2, столбец 2 = B2)
.Value
Значение ячейки — для чтения и записи
Cells(Rows.Count, 1).End(xlUp).Row
Номер последней заполненной строки в столбце

Определение последней строки — ключевой приём для таблиц переменной длины: Cells(Rows.Count, 1).End(xlUp).Row имитирует переход Ctrl+↑ со дна столбца и возвращает номер последней непустой строки. Так макрос сам подстраивается под число позиций в спецификации.

Циклы: ядро автоматизации

Циклы заставляют макрос повторять действия — именно они превращают запись одной операции в обработку тысяч строк. В VBA три основных вида цикла.

For…Next — когда известно число повторений

Счётный цикл: перебирает строки от первой до последней. Основной инструмент для таблиц.

VBA — For…Next по строкам
Sub СуммаПоСтрокам()
    Dim i As Long, last As Long
    last = Cells(Rows.Count, 1).End(xlUp).Row   ' последняя строка
    For i = 2 To last                        ' со 2-й (после шапки)
        Cells(i, 4).Value = Cells(i, 2).Value + Cells(i, 3).Value
    Next i
End Sub

Ключевое слово Step задаёт шаг счётчика: Step 2 — через строку, Step -1 — в обратную сторону. Обратный ход обязателен при удалении строк, иначе после удаления цикл пропускает соседнюю строку.

For Each…Next — перебор коллекции

Проходит по всем элементам диапазона, листам книги или элементам массива, не оперируя номерами.

VBA — For Each по ячейкам
Sub ПометитьПревышение()
    Dim c As Range
    For Each c In Range("D2:D200")
        If c.Value > 150 Then c.Interior.Color = vbRed
    Next c
End Sub

Do While / Do Until — пока выполняется условие

Повтор, пока условие истинно (или пока не станет истинным). Полезен, когда число шагов заранее неизвестно — например, идти по столбцу до первой пустой ячейки.

В любом цикле Exit For (или Exit Do) досрочно прерывает перебор, как только цель найдена. Без выхода макрос впустую пройдёт остаток большой таблицы.

Наверх

Обработка таблиц: типовые инженерные задачи

Обработка таблиц — основное применение макросов у инженера. Разберём частый шаблон: пройти по таблице, отобрать строки по условию и перенести их в другую область — например, выбрать из спецификации позиции дороже заданного порога.

VBA — выборка строк по условию
Sub ВыбратьПозиции()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim last As Long, i As Long, out As Long
    last = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    out = 2                                ' строка вывода в столбце F
    For i = 2 To last
        If ws.Cells(i, 4).Value > 100000 Then
            ws.Cells(out, 6).Value = ws.Cells(i, 1).Value
            ws.Cells(out, 7).Value = ws.Cells(i, 4).Value
            out = out + 1
        End If
    Next i
End Sub

Что делает макрос: определяет последнюю строку таблицы, проходит все позиции со второй строки, и если значение в столбце 4 (D) превышает порог, копирует наименование и значение в столбцы F и G, наращивая счётчик строки вывода. Число позиций может быть любым — код подстроится.

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

Наверх

Скорость и надёжность макроса

Инженерные таблицы бывают большими, поэтому важны несколько приёмов, отличающих рабочий макрос от медленного и хрупкого.

Объявляйте переменные
Счётчики строк — As Long: у типа Integer предел 32 767, а строк на листе больше миллиона, поэтому Integer переполнится
Не используйте Select
Работайте с ячейками напрямую (Cells(i,2).Value), а не через выделение — быстрее и надёжнее
Последнюю строку — до цикла
Вычисляйте last один раз перед циклом, а не на каждой итерации
Отключайте перерисовку
Application.ScreenUpdating = False в начале и True в конце
Массив вместо ячеек
На больших объёмах читайте диапазон в массив (arr = Range(...).Value), обрабатывайте в памяти и выгружайте обратно

Чтение и запись поячеечно на десятках тысяч строк заметно медленнее, чем разовое чтение диапазона в массив, обработка в памяти и разовая выгрузка результата обратно на лист. Для типовых инженерных таблиц в сотни-тысячи строк хватает и обычного цикла, но приём с массивом стоит держать в запасе.

Практика Начинайте с записи макроса, чтобы получить рабочую заготовку, затем оборачивайте её в цикл по строкам с определением последней строки — этого достаточно для большинства инженерных задач обработки таблиц.

Наверх

Частые вопросы

Чем макрос отличается от функции листа?

Функция листа возвращает значение в ячейку и не меняет книгу. Макрос — это процедура (Sub), которая выполняет действия: меняет ячейки, форматирует, создаёт листы, собирает отчёты. Для инженерной автоматизации нужны именно макросы.

Как записать первый макрос?

Включите вкладку «Разработчик», нажмите «Записать макрос», задайте имя, выполните нужные действия и остановите запись. Сохраните книгу в формате .xlsm. Записанный код можно посмотреть и доработать в редакторе по Alt+F11.

Почему макрос не сохранился после закрытия файла?

Скорее всего, книга сохранена в обычном формате .xlsx, который не хранит код. Макросы сохраняются только в форматах с их поддержкой — «Книга Excel с поддержкой макросов» (.xlsm) или двоичная книга (.xlsb).

Какой цикл выбрать для таблицы?

Если известно число строк или нужен номер строки — For…Next с определением последней строки. Если достаточно перебрать все ячейки диапазона или все листы — For Each…Next. Если число шагов неизвестно (идти до пустой ячейки) — Do While.

Как найти последнюю строку таблицы?

Выражением Cells(Rows.Count, 1).End(xlUp).Row — оно возвращает номер последней непустой строки в первом столбце. Это позволяет макросу работать с таблицей любой длины.

Почему при удалении строк цикл пропускает данные?

После удаления строки нижние сдвигаются вверх, и обычный цикл «перешагивает» соседнюю строку. Решение — идти в обратном порядке: For i = last To 2 Step -1.

Макрос работает медленно на больших таблицах. Что делать?

Отключите перерисовку экрана (Application.ScreenUpdating = False), не используйте Select, вычисляйте последнюю строку до цикла, а на десятках тысяч строк читайте диапазон в массив, обрабатывайте в памяти и выгружайте результат разом.

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

Источники

  1. Microsoft Learn — Getting started with VBA in Office; справочник объектной модели Excel (Application, Workbook, Worksheet, Range).
  2. Microsoft Learn — Excel VBA reference: операторы For...Next, For Each...Next, Do...Loop.
  3. Уокенбах Дж. Excel. Программирование на VBA (Excel Power Programming with VBA).
  4. Техническая документация и справочные материалы по автоматизации Excel средствами VBA.

© Компания Иннер Инжиниринг. Все права защищены.

Появились вопросы?

Вы можете задать любой вопрос на тему нашей продукции или работы нашего сайта.