Основы VBA: переменные, типы, операторы

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

Что такое VBA и где его искать

VBA (Visual Basic for Applications) — встроенный язык программирования Microsoft Office для автоматизации задач: макросы, обработка данных, свои функции. Редактор кода открывается сочетанием Alt+F11. В нём есть окно кода (где пишут процедуры), окно проекта (список книг/листов/модулей) и окно вывода Immediate Window (для отладки, команда Debug.Print).

Первый запуск: модуль, F5, сохранение, безопасность

Код процедур и функций пишут не на листе и не в самой книге, а в обычном модуле: в редакторе VBA — правой кнопкой по названию проекта → Insert → Module (или через меню «Вставка → Модуль»). Внутри модуля пишут Sub ИмяПроцедуры() ... End Sub. Чтобы запустить процедуру: поставь курсор внутрь неё и нажми F5 в редакторе, либо в самом Excel открой список макросов клавишами Alt+F8 и запусти нужный по имени.

Обычная книга *.xlsx код VBA НЕ сохраняет — при сохранении макрос будет потерян молча, без предупреждения. Книгу с макросами обязательно сохраняют в формате Excel Macro-Enabled Workbook (*.xlsm).

Редактор Visual Basic: слева Project Explorer с деревом книги и листов, справа — окно кода с открытым обычным модулем и текстом Sub...End Sub

При открытии файла с макросами из интернета или почты Excel показывает жёлтую полосу предупреждения безопасности. Включать макросы («Enable Content») стоит только в файлах из доверенного источника — своих или проверенных; в файлах от незнакомых отправителей макросы включать не нужно.

Диалог сохранения книги с выбранным типом файла «Книга Excel с поддержкой макросов (*.xlsm)» и жёлтая панель предупреждения безопасности макросов при открытии файла

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

Переменные объявляют ключевым словом Dim: Dim age As Integer. Основные типы: Integer — целые числа, Double — числа с плавающей точкой, String — текст, Boolean — True/False, Date — дата и время.

Dim age As Integer      -> целое число
Dim price As Double     -> число с плавающей точкой
Dim name As String      -> текст
Dim isTrue As Boolean   -> True/False
Dim today As Date       -> дата/время

Операторы: арифметика, сравнение, логика, строки

Арифметика: + - * / и Mod (остаток от деления). Сравнение: = <> > < >= <=. Логика: And (И), Or (ИЛИ), Not (НЕ). Строки объединяют знаком &.

Dim a As Integer, b As Integer, result As Integer
a = 10 : b = 3
result = a + b     ' 13  — сложение
result = a - b     ' 7   — вычитание
result = a * b     ' 30  — умножение
result = a Mod b   ' 1   — остаток от деления

Dim x As Integer, y As Integer, isTrue As Boolean
x = 10 : y = 5
isTrue = (x > y)          ' True  — сравнение
isTrue = (x > 0 And y > 0) ' True  — оба условия сразу (И)

Dim firstName As String, lastName As String
firstName = "Анна" : lastName = "Петрова"
Debug.Print firstName & " " & lastName  ' Анна Петрова — конкатенация

Массивы и встроенные функции

Массив — это пронумерованный набор ячеек памяти под одним именем, как ряд одинаковых коробок с номерами на них: не 5 отдельных переменных score1score5, а одна переменная scores, где к каждому значению обращаются по номеру (индексу). Индексы в VBA по умолчанию начинаются с 0.

Забегаем вперёд. В примере ниже встретится конструкция For i = ... To ... / Next i — это цикл: он повторяет одну и ту же строку кода для каждого значения счётчика i. Здесь он нужен только для того, чтобы показать, как перебрать весь массив; подробно циклы разберём в следующей теме 5.2. Пока достаточно читать её как «повтори это для каждого номера от первого до последнего».

Dim scores(4) As Integer   ' массив на 5 ячеек: индексы 0,1,2,3,4

scores(0) = 78
scores(1) = 92
scores(2) = 65
scores(3) = 88
scores(4) = 71

Debug.Print scores(2)              ' 65  — прямое обращение по индексу
Debug.Print UBound(scores)         ' 4   — наибольший индекс
Debug.Print LBound(scores)         ' 0   — наименьший индекс

For i = LBound(scores) To UBound(scores)
    Debug.Print scores(i)           ' переберёт все 5 оценок по очереди
Next i

Готовый список значений сразу — без построчного присвоения: Array(1, 2, 3). Изменить размер уже существующего массива, сохранив старые значения — ReDim Preserve. Разбить строку на массив по разделителю — Split.

Dim fruits As Variant
fruits = Array("яблоко", "банан", "груша")   ' готовый массив из 3 элементов
Debug.Print fruits(1)                          ' банан

ReDim Preserve scores(6)   ' было 5 ячеек (0-4), стало 7 (0-6), значения 0-4 сохранены

Dim csv As String
csv = "Иванов,Петров,Сидоров"
Dim names As Variant
names = Split(csv, ",")     ' names(0)="Иванов", names(1)="Петров", names(2)="Сидоров"

Строковые функции: Len (длина), UCase/LCase (регистр), InStr (позиция подстроки), Trim (обрезать пробелы), Mid (извлечь часть). Числовые: Abs, Sqr, Round. Даты: Year/Month/Day, DateAdd/DateDiff.

Dim s As String
s = "  Отчёт "
Debug.Print Len(s)           ' 8  — длина строки (с пробелами)
Debug.Print UCase(s)         ' "  ОТЧЁТ " — в верхний регистр
Debug.Print Trim(s)          ' "Отчёт" — без пробелов по краям
Debug.Print InStr(s, "ч")    ' 5  — позиция первого вхождения

Dim currentDate As Date
currentDate = Date
Dim newDate As Date
newDate = DateAdd("d", 7, currentDate)          ' прибавить 7 дней
Debug.Print DateDiff("d", currentDate, newDate) ' 7 — разница в днях

Проверь себя

Контрольный вопрос. Что такое VBA?

Австроенный язык программирования Microsoft Office для автоматизации задач
Ботдельная программа, не связанная с Office
Вязык для создания веб-сайтов
Годна из функций Excel вроде СУММ

Подсказка: VBA живёт ВНУТРИ Office, не отдельно от него.

Проверить ответ →

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

Контрольный вопрос. Отметь все верные шаги первого запуска макроса (не менее двух вариантов).

Выберите все верные варианты.

Акод процедуры вставляют в обычный модуль (Insert → Module)
Бпроцедуру запускают клавишей F5 в редакторе или через список макросов Alt+F8
Вкнигу с макросами обязательно сохраняют в формате *.xlsm
Гкод можно вставить прямо в текст любой ячейки листа
Дмакросы стоит включать в любом файле, даже от незнакомого отправителя

Подсказка: Два варианта либо путают модуль с ячейкой листа, либо дают опасный совет про безопасность.

Проверить ответ →

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

Контрольный вопрос. Excel показал жёлтую полосу с предупреждением про макросы при открытии файла, присланного по почте. Как правильно поступить?

Авключить макросы, только если доверяешь источнику файла
Бвсегда включать макросы, чтобы код точно заработал
Вникогда не открывать файлы с макросами вообще
Гпереименовать файл в .xlsx, чтобы предупреждение исчезло

Подсказка: Предупреждение — это не запрет, а приглашение подумать об источнике файла.

Проверить ответ →

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

Задание. Напиши строку кода сам. Объяви переменную с именем price, которая будет хранить дробное число (например, 10.5). Впиши строку целиком, как её пишут в модуле.

Подсказка: Схема объявления: ключевое слово объявления, имя переменной, слово As и название типа. Дробные числа хранит тип Double.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Контрольный вопрос. Dim price As Double : price = 10.5 — какой тип данных у price?

Ачисло с плавающей точкой
Бцелое число
Встрока
Глогическое значение

Подсказка: Double хранит дробные числа.

Проверить ответ →

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

Задание. Dim a As Integer, b As Integer : a = 10 : b = 3 : result = a Mod b — что выведет result? Впиши число.

Подсказка: Mod возвращает остаток от деления, а не частное.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Контрольный вопрос. Оператор & в VBA используется для…

Аобъединения (конкатенации) строк
Бсложения чисел
Всравнения значений
Глогического И

Подсказка: Именно этот знак склеивает текстовые куски в одну строку.

Проверить ответ →

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

Задание. myString = «Hello» — что вернёт Len(myString)? Впиши число.

Подсказка: Len считает количество символов в строке.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Контрольный вопрос. InStr(«Excel», «c») возвращает…

Апозицию первого вхождения символа «c» в строке
Бколичество вхождений символа «c»
ВTrue или False
Гсам символ «c»

Подсказка: InStr ищет ПОЗИЦИЮ, а не факт наличия или количество.

Проверить ответ →

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

Задание. Напиши строку кода сам. В переменной currentDate лежит дата. Нужно прибавить к ней 7 дней и положить результат в переменную newDate. Используй функцию DateAdd. Впиши строку целиком.

Подсказка: Слева от знака равно — переменная, куда кладём результат. У DateAdd три аргумента по порядку: код интервала в кавычках, сколько прибавить, к какой дате.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Контрольный вопрос. Отметь все верные утверждения про массивы VBA (не менее двух вариантов).

Выберите все верные варианты.

АArray(1,2,3) создаёт массив из готовых значений
БUBound возвращает наибольший индекс массива
ВReDim Preserve сохраняет уже введённые значения при изменении размера массива
Гвсе массивы в VBA имеют фиксированный размер, который нельзя изменить
ДSplit объединяет массив строк в одну строку

Подсказка: Два варианта неверны: ReDim Preserve именно МЕНЯЕТ размер массива (значит, размер не фиксирован), а Split делает обратное — разбивает строку НА массив, а не собирает массив в строку.

Проверить ответ →

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

Задание. Допиши пропущенный индекс, чтобы КОД ниже записал 15 именно в ЧЕТВЁРТЫЙ по счёту элемент массива (не в пятый и не в третий). Впиши число: Dim scores(4) As Integer : scores(___) = 15

Подсказка: Индексы начинаются с 0, значит первый элемент — scores(0), а четвёртый по счёту — на 3 меньше своего номера.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Итог

Итог. VBA — встроенный язык Office (Alt+F11). Код пишут в обычном модуле (Insert → Module), запускают через F5 или список макросов (Alt+F8), а книгу с макросами сохраняют только как *.xlsm — макросы включают лишь в файлах из доверенного источника. Переменные объявляют через Dim с типом (Integer/Double/String/Boolean/Date). Арифметика, сравнение, логика и конкатенация (&) работают почти как в формулах Excel. Массивы индексируются с 0 по умолчанию; встроенные функции покрывают числа (Round, Abs), строки (Len, InStr, Mid) и даты (DateAdd, DateDiff).

Назад к главе 5  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд: Управляющие конструкции →

Школа Виктора Комлева