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

Скопировано:

Нажмите на код, чтобы скопировать его.


Что такое VBA?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

' Запись
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

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

Отладка

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


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