Макросы VBA в Excel — первый макрос за 10 минут
Пошаговое руководство по VBA в Excel для начинающих. От включения вкладки Разработчик до написания полноценных макросов с переменными, циклами и условиями. Два практических примера с кодом.
Представьте: каждый понедельник вы открываете файл с данными, удаляете пустые строки, форматируете заголовки, добавляете границы таблицы, меняете формат чисел и сохраняете результат. На это уходит 15-20 минут. А теперь представьте, что всё это делается за 2 секунды одним нажатием кнопки. Это и есть VBA — язык макросов, встроенный в Excel.
В этом руководстве вы создадите свой первый макрос за 10 минут, даже если никогда раньше не программировали. Мы пойдём от простого к сложному: сначала запишем макрос автоматически, затем разберём код и научимся его редактировать.
Что такое VBA и зачем он нужен
VBA (Visual Basic for Applications) — это язык программирования, встроенный во все настольные приложения Microsoft Office. Он позволяет автоматизировать любые действия, которые вы выполняете вручную: форматирование, вычисления, копирование данных, создание отчётов, даже отправку писем через Outlook.
Когда VBA незаменим
- Повторяющиеся задачи — форматирование еженедельных отчётов, обработка выгрузок из 1С, подготовка данных для загрузки в другие системы
- Массовые операции — обработка сотен файлов, переименование листов, объединение данных из множества книг
- Сложная логика — действия, которые невозможно реализовать формулами: условное форматирование по сложным правилам, генерация документов, интерактивные формы
- Взаимодействие между приложениями — передача данных из Excel в Word, создание писем в Outlook, импорт из текстовых файлов
Когда VBA — перебор
Шаг 1: Включаем вкладку «Разработчик»
По умолчанию вкладка «Разработчик» скрыта в Excel. Без неё вы не сможете создавать и редактировать макросы. Включается она один раз:
- Откройте Excel
- Нажмите Файл → Параметры (Options)
- Перейдите в раздел «Настроить ленту» (Customize Ribbon)
- В правом столбце «Основные вкладки» найдите «Разработчик» (Developer) и поставьте галочку
- Нажмите OK
На ленте появится новая вкладка «Разработчик» с кнопками для работы с макросами, редактором VBA и элементами управления формами.
Шаг 2: Записываем первый макрос
Самый простой способ создать макрос — записать его. Excel будет фиксировать все ваши действия и автоматически генерировать VBA-код.
Подготовка
Создайте простую таблицу с данными для практики. Например, список из 5-10 строк с колонками: Имя, Должность, Зарплата. Не форматируйте таблицу — мы будем записывать макрос форматирования.
Запись макроса
- Перейдите на вкладку «Разработчик»
- Нажмите «Запись макроса» (Record Macro)
- В появившемся окне:
- Имя макроса: ФорматироватьОтчёт (без пробелов!)
- Сочетание клавиш: Ctrl+Shift+F (необязательно, но удобно)
- Сохранить в: «Эта книга» (This Workbook)
- Описание: Форматирует таблицу с данными сотрудников
- Нажмите OK — запись началась
Теперь выполните действия, которые хотите автоматизировать:
- Выделите строку заголовков
- Сделайте шрифт жирным (Ctrl+B)
- Задайте заливку ячеек заголовков цветом
- Выделите всю таблицу
- Добавьте границы (Ctrl+1 → Границы → Все границы)
- Выделите столбец с зарплатами
- Примените числовой формат с разделителем тысяч (Ctrl+Shift+!)
- Подгоните ширину столбцов (выделите все → двойной клик на границе столбца)
Когда закончите, нажмите «Остановить запись» на вкладке «Разработчик».
Шаг 3: Смотрим и разбираем код
Теперь откроем код, который Excel сгенерировал автоматически:
- Нажмите Alt+F11 — откроется редактор VBA
- В левой панели (Project Explorer) найдите вашу книгу
- Раскройте папку «Модули» (Modules) → дважды кликните на «Module1»
- Вы увидите записанный код макроса
Код будет выглядеть примерно так:
Sub ФорматироватьОтчёт()
'
' ФорматироватьОтчёт Макрос
' Форматирует таблицу с данными сотрудников
'
Rows("1:1").Select
Selection.Font.Bold = True
With Selection.Interior
.Color = 15773696
End With
Range("A1").CurrentRegion.Select
Selection.Borders.LineStyle = xlContinuous
' ... и так далее
End Sub
Разберём ключевые элементы:
- Sub ... End Sub — начало и конец макроса (процедуры)
- Строки с апострофом (') — комментарии, они не выполняются
- .Select — выделение объекта (ячейки, диапазона, строки)
- Selection. — действие с выделенным объектом
- Range("A1") — обращение к ячейке A1
- Rows("1:1") — обращение к первой строке
- .Font.Bold = True — сделать шрифт жирным
- .Interior.Color — цвет заливки ячейки
Rows("1:1").Font.Bold = True вместо Rows("1:1").Select + Selection.Font.Bold = True.
Шаг 4: Основы VBA — переменные, циклы, условия
Чтобы писать собственные макросы, а не только записывать, нужно знать три базовые концепции.
Переменные
Переменная — это именованная ячейка памяти, в которой хранится значение. Объявляются через Dim:
Dim имяСотрудника As String
Dim зарплата As Long
Dim процент As Double
имяСотрудника = "Иванов"
зарплата = 85000
процент = 0.13
Основные типы данных: String (текст), Long (целое число), Double (дробное число), Boolean (True/False), Date (дата).
Условия (If...Then)
If зарплата > 100000 Then
MsgBox "Высокая зарплата"
ElseIf зарплата > 50000 Then
MsgBox "Средняя зарплата"
Else
MsgBox "Ниже среднего"
End If
Циклы (For...Next)
' Перебрать строки с 2 по 100
Dim i As Long
For i = 2 To 100
If Cells(i, 1).Value = "" Then Exit For
Cells(i, 4).Value = Cells(i, 3).Value * 0.87
Next i
Этот цикл проходит по строкам со 2-й по 100-ю, проверяет, не пуста ли ячейка в столбце A, и записывает в столбец D значение из столбца C, умноженное на 0.87 (зарплата после вычета 13% НДФЛ).
Практический пример 1: Автоформатирование отчёта
Напишем макрос, который автоматически форматирует любую таблицу: выделяет заголовки, добавляет границы, форматирует числа и подгоняет ширину столбцов.
Sub ФорматироватьОтчёт()
Dim таблица As Range
Dim заголовки As Range
Dim последняяСтрока As Long
Dim последнийСтолбец As Long
' Определяем размер таблицы
последняяСтрока = Cells(Rows.Count, 1).End(xlUp).Row
последнийСтолбец = Cells(1, Columns.Count).End(xlToLeft).Column
' Задаём диапазоны
Set таблица = Range(Cells(1, 1), Cells(последняяСтрока, последнийСтолбец))
Set заголовки = Range(Cells(1, 1), Cells(1, последнийСтолбец))
' Форматируем заголовки
With заголовки
.Font.Bold = True
.Font.Size = 11
.Interior.Color = RGB(68, 114, 196) ' Синий фон
.Font.Color = RGB(255, 255, 255) ' Белый текст
.HorizontalAlignment = xlCenter
End With
' Добавляем границы
With таблица.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(0, 0, 0)
End With
' Подгоняем ширину столбцов
таблица.Columns.AutoFit
MsgBox "Отчёт отформатирован!", vbInformation
End Sub
Этот макрос автоматически определяет размер таблицы, поэтому работает с таблицами любого размера — хоть 5 строк, хоть 50 000.
Практический пример 2: Перенос данных на другой лист
Частая задача: из общего списка данных выбрать строки по условию и скопировать на другой лист. Например, выбрать всех сотрудников с зарплатой выше 80 000 и перенести на лист «Высокая ЗП».
Sub ПеренестиПоУсловию()
Dim источник As Worksheet
Dim результат As Worksheet
Dim последняяСтрока As Long
Dim строкаРезультата As Long
Dim i As Long
' Назначаем листы
Set источник = Sheets("Данные")
' Создаём лист результата, если его нет
On Error Resume Next
Set результат = Sheets("Высокая ЗП")
On Error GoTo 0
If результат Is Nothing Then
Set результат = Sheets.Add(After:=Sheets(Sheets.Count))
результат.Name = "Высокая ЗП"
Else
результат.Cells.Clear ' Очищаем старые данные
End If
' Копируем заголовки
источник.Rows(1).Copy результат.Rows(1)
' Перебираем строки и копируем подходящие
последняяСтрока = источник.Cells(источник.Rows.Count, 1).End(xlUp).Row
строкаРезультата = 2
For i = 2 To последняяСтрока
If источник.Cells(i, 3).Value > 80000 Then ' Столбец C = зарплата
источник.Rows(i).Copy результат.Rows(строкаРезультата)
строкаРезультата = строкаРезультата + 1
End If
Next i
' Подгоняем ширину столбцов
результат.Columns.AutoFit
' Переходим на лист результата
результат.Activate
MsgBox "Перенесено строк: " & строкаРезультата - 2, vbInformation
End Sub
Макрос создаёт новый лист (или очищает существующий), копирует заголовки, затем проходит по всем строкам и переносит те, где зарплата (столбец C) больше 80 000. В конце показывает, сколько строк перенесено.
Безопасность макросов
VBA — мощный инструмент, но макросы из непроверенных источников могут быть опасны. Вредоносный макрос может удалить файлы, украсть данные или установить вирус.
Правила безопасности
- Никогда не включайте макросы в файлах от незнакомых отправителей
- Никогда не скачивайте и не запускайте макросы из непроверенных источников
- Если при открытии файла появляется жёлтая полоса «Включить содержимое» — подумайте, доверяете ли вы источнику файла
Настройка уровня безопасности макросов
- Вкладка «Разработчик» → «Безопасность макросов»
- Рекомендуемый уровень: «Отключить все макросы с уведомлением»
- Этот уровень блокирует макросы по умолчанию, но позволяет включить их для доверенных файлов
Сохранение файлов с макросами
Файлы с макросами необходимо сохранять в специальном формате:
- .xlsm — книга Excel с поддержкой макросов
- .xlsb — двоичная книга Excel (тоже поддерживает макросы, работает быстрее с большими файлами)
Стандартный формат .xlsx не поддерживает макросы. Если вы сохраните файл с макросами как .xlsx, Excel предупредит, что макросы будут удалены. Всегда выбирайте «Сохранить как» → формат .xlsm.
Куда двигаться дальше
Вы создали свой первый макрос — отлично! Вот план дальнейшего развития:
Уровень 2: Уверенный пользователь
- Работа с диапазонами (Range, Cells, Rows, Columns)
- Циклы For Each для перебора ячеек
- Работа с несколькими листами и книгами
- Обработка ошибок (On Error)
Уровень 3: Продвинутый
- Пользовательские формы (UserForms)
- Работа с файловой системой (открытие, создание файлов)
- Взаимодействие с Word и Outlook
- Подключение к базам данных
Уровень 4: Эксперт
- Работа с API (HTTP-запросы)
- Классы и объектно-ориентированное программирование
- Оптимизация производительности для больших данных
- Создание надстроек (Add-ins)
VBA открывает огромные возможности для автоматизации рутинной работы в Excel. Начните с простых макросов, постепенно усложняйте задачи, и через несколько месяцев вы сможете автоматизировать практически любой рабочий процесс. Все возможности VBA доступны в Excel 2024 — приобретайте лицензию в нашем магазине и начинайте автоматизировать свою работу уже сегодня.