Руководство по VBA

Что такое VBA?

VBA (Visual Basic for Applications) - это язык программирования Microsoft, встроенный в Office-приложения: Excel, Word, Access, PowerPoint. Позволяет автоматизировать рутинные задачи, создавать отчёты, обрабатывать данные и управлять интерфейсом.

Примеры использования:

  • Автоматизация отчётов в Excel.
  • Массовая обработка документов в Word.
  • Создание пользовательских форм и кнопок.

Как открыть редактор VBA

  • Alt + F11 - открыть редактор VBA в Excel/Word.

  • Разработчик → Визуальный редактор - если включён режим разработчика.

  • Разработчик → Вставить → Модуль - добавить новый модуль для кода.

Включение режима разработчика (Excel)

  1. Файл → Параметры → Настройка ленты.
  2. Установите галочку "Разработчик".
  3. Готово - вкладка "Разработчик" появится в меню.

Первая программа: Hello World

Sub Привет()
    MsgBox "Привет, мир!"
End Sub

Запустите через F5 или кнопку "Выполнить".

Структура процедуры

  • Sub ИмяПроцедуры() - начало процедуры.

  • End Sub - конец.

  • Function ИмяФункции() As Тип - функция, возвращающая значение.

  • End Function - конец функции.

Переменные и типы данных

Dim имя As String
Dim возраст As Integer
Dim сумма As Double
Dim дата As Date
Dim флажок As Boolean

имя = "Анна"
возраст = 25
сумма = 99.99
дата = Date
флажок = True

Объявление без типа (Variant - менее эффективно):

Dim x ' может хранить любой тип

Работа с Excel: основные объекты

  • ThisWorkbook - текущая книга.

  • Sheets("Лист1") - доступ к листу по имени.

  • Range("A1") - ячейка A1.

  • Range("A1:C10") - диапазон ячеек.

  • Cells(1, 1) - ячейка (строка, столбец).

  • ActiveCell - текущая выделенная ячейка.

  • Selection - выделенный диапазон.

Чтение и запись в ячейки

' Запись
Range("A1").Value = "Заголовок"
Cells(2, 1).Value = 100

' Чтение
Dim текст As String
текст = Range("A1").Value

Dim число As Double
число = Cells(2, 1).Value

Условия (If / Else)

If Range("B2").Value > 100 Then
    Range("C2").Value = "Высокое"
Else
    Range("C2").Value = "Низкое"
End If

С несколькими условиями:

If возраст < 18 Then
    категория = "Дети"
ElseIf возраст < 60 Then
    категория = "Взрослые"
Else
    категория = "Пенсионеры"
End If

Циклы

Цикл по строкам:

For i = 1 To 10
    Cells(i, 1).Value = "Строка " & i
Next i

While-цикл:

i = 1
Do While Cells(i, 1).Value <> ""
    Cells(i, 2).Value = UCase(Cells(i, 1).Value)
    i = i + 1
Loop

For Each - перебор диапазона:

For Each ячейка In Range("A1:A10")
    If ячейка.Value > 50 Then
        ячейка.Interior.Color = RGB(255, 0, 0) ' Красный фон
    End If
Next ячейка

Массивы

Dim имена(1 To 3) As String
имена(1) = "Иван"
имена(2) = "Мария"
имена(3) = "Сергей"

' Массив из диапазона
Dim данные As Variant
данные = Range("A1:A10").Value

Функции (возвращают значение)

Function Квадрат(x As Double) As Double
    Квадрат = x * x
End Function

Теперь можно использовать в ячейке Excel: =Квадрат(5)

Обработка ошибок

On Error Resume Next ' Игнорировать ошибки
' ... опасный код ...
On Error GoTo 0 ' Вернуть обработку ошибок

Или с перехватом:

On Error GoTo ОбработкаОшибки
    Workbooks.Open "C:\нет_такого.xlsx"
    Exit Sub

ОбработкаОшибки:
    MsgBox "Файл не найден!", vbCritical

Пример: Автоформатирование таблицы

Sub ФорматТаблицы()
    With Range("A1:D1")
        .Font.Bold = True
        .Interior.Color = RGB(200, 200, 255)
        .Borders.LineStyle = xlContinuous
    End With
End Sub

Пример: Копирование данных между листами

Sub КопироватьДанные()
    Sheets("Источник").Range("A1:B10").Copy
    Sheets("Отчёт").Range("A1").PasteSpecial xlPasteValues
    Application.CutCopyMode = False
End Sub

Пример: Генерация отчёта

Sub ГенерацияОтчёта()
    Dim i As Integer, сумма As Double
    сумма = 0

    For i = 2 To 100
        If Cells(i, 3).Value = "Продажа" Then
            сумма = сумма + Cells(i, 4).Value
        End If
    Next i

    Sheets("Отчёт").Range("B1").Value = "Итого:"
    Sheets("Отчёт").Range("C1").Value = сумма
End Sub

Работа с пользовательскими формами (UserForm)

  1. В редакторе VBA: Вставить → UserForm.
  2. Добавьте элементы: TextBox, Label, CommandButton.
  3. Напишите обработчик кнопки:
Private Sub CommandButton1_Click()
    MsgBox "Привет, " & TextBox1.Text
    Unload Me
End Sub

Полезные команды

  • MsgBox "Текст" - вывод сообщения.

  • InputBox("Введите имя") - запрос ввода от пользователя.

  • Application.ScreenUpdating = False - отключает обновление экрана (ускоряет выполнение).

  • Application.Wait Now + TimeValue("00:00:03") - пауза на 3 секунды.

  • ThisWorkbook.Save - сохранить книгу.

  • Workbooks.Add - создать новую книгу.

Отладка

  • F8 - пошаговое выполнение.

  • Ctrl + G - открыть окно Immediate (можно писать: ? Range("A1").Value).

  • Stop - точка останова (как breakpoint).

  • Debug.Print "значение=" & x - вывод в Immediate.

Безопасность и советы

  • Сохраняйте файл как .xlsm (с поддержкой макросов).
  • Пользователи должны включить макросы при открытии.
  • Не используйте VBA для обработки конфиденциальных данных без шифрования.
  • Тестируйте скрипты на копии данных.
  • По возможности переходите на Office Scripts (в Excel для Web) - более современная альтернатива.

Совет: Начинайте с малого: одна кнопка → один макрос. Постепенно усложняйте. VBA - мощный инструмент автоматизации, особенно в Excel.

Скопировано:
Назад к разделу: Записи