Объекты Excel из VBA: книги, листы, диапазоны

После урока сможешь: обращаться из кода к книгам, листам, диапазонам и ячейкам Excel — читать и менять значения, добавлять листы, находить нужные ячейки.
Вспомни: «книга → лист → ячейка/диапазон» — та же иерархия, что в теме 1.2, только теперь к ней обращаются из кода, а не мышью.

Иерархия объектов: Workbook, Worksheet, Range, Cells

В VBA всё устроено как вложенные объекты: Workbook (книга) содержит Worksheet (листы), лист содержит Range/Cells (диапазоны и ячейки). У объектов есть свойства (что объект ХРАНИТ, например Range("A1").Value) и методы (что объект ДЕЛАЕТ, например Range("A1").Copy).

Работа с книгами (Workbook)

Методы: Save (сохранить), SaveAs (сохранить копию с новым именем), Close (закрыть). У самой книги (Workbook) НЕТ собственного свойства Visible — видимость управляется отдельно: Application.Visible = False скрывает окно всего Excel целиком (полезно для фоновой пакетной обработки), а Workbook.Windows(1).Visible = False скрывает окно конкретной книги.

Dim книга As Workbook
Set книга = ActiveWorkbook

книга.Save                              ' сохранить книгу как есть
книга.SaveAs "C:\Отчёты\Копия.xlsx"      ' сохранить копию под новым именем
книга.Close                              ' закрыть книгу

Работа с листами (Worksheet)

Новый лист добавляют так: Sheets.Add. Удаляют: ActiveSheet.Delete. К листу обращаются по имени (Sheets("Отчёт")) или по номеру по порядку (Sheets(1)). Перебор всех листов книги: For Each sh In ThisWorkbook.Worksheets ... Next sh.

Диапазоны и ячейки (Range, Cells)

Диапазон задают именем (Range("A1:B10")) или через строку/столбец (Cells(row, column)). Читают/пишут значение через .Value: Range("A1").Value = 100. Агрегаты доступны через функции листа: Application.WorksheetFunction.Sum(Range("A1:A10")).

Метод .Find ищет ячейку с заданным значением внутри диапазона. Если совпадение не найдено, он возвращает Nothing — это обязательно проверять через If Not результат Is Nothing Then, иначе следующее же обращение к ячейке (например, .Address) упадёт с ошибкой.

Dim диапазон As Range, найдено As Range
Set диапазон = Range("A1:B10")
Set найдено = диапазон.Find(What:="Итого")

If Not найдено Is Nothing Then
    MsgBox "Найдено в ячейке: " & найдено.Address   ' например, B4
Else
    MsgBox "Значение не найдено"
End If

Именованный диапазон создают так: ThisWorkbook.Names.Add "Курс", Range("B1") — дальше на него можно ссылаться по имени в формулах и коде.

Workbook (книга)
  \-- Worksheet (лист) -- Sheets("Отчёт") или Sheets(1)
        \-- Range/Cells (диапазон/ячейка) -- Range("A1:B10"), Cells(2,3)

Range("A1").Value = 100      <- записать значение
x = Range("A1").Value         <- прочитать значение

Проверь себя

Контрольный вопрос. Как устроена иерархия объектов Excel в VBA?

АWorkbook содержит Worksheet, а тот — Range/Cells
Бвсе три объекта независимы и не вложены друг в друга
ВCells содержит Workbook, а Worksheet — сам по себе
ГRange содержит Worksheet, а тот — Workbook

Подсказка: Та же вложенность, что и в реальной книге: книга → листы → ячейки на листе.

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Задание. Напиши строку кода сам. Нужно записать число 100 в ячейку A1 текущего листа, обратившись к ней по имени через Range. Впиши строку целиком.

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

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

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Контрольный вопрос. Какое из утверждений про видимость (Visible) в Excel VBA верно?

Ау Workbook есть своё прямое свойство Visible, ровно как и у Worksheet
БVisible относится только к листам (Worksheet), но не к окнам или приложению
Вскрыть можно только всё приложение Excel целиком, отдельную книгу — нельзя
Гу Workbook нет своего Visible — видимость через Application или Window

Подсказка: По официальной документации Microsoft существуют Application.Visible и Window.Visible, а отдельного Workbook.Visible — нет.

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Задание. Напиши строку кода сам. Нужно прочитать значение ячейки, стоящей во 2-й строке и 3-м столбце, и положить его в переменную x. Обратись к ячейке через Cells (сначала строка, потом столбец). Впиши строку целиком.

Подсказка: Слева переменная и знак равно, справа — Cells с двумя числами в скобках (строка, столбец) и через точку свойство значения.

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

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Контрольный вопрос. For Each sh In ThisWorkbook.Worksheets … Next sh — что делает этот код?

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

Подсказка: For Each из темы 5.2 перебирает элементы коллекции — здесь коллекция листов.

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Задание. Допиши пропущенное слово, чтобы код ниже присвоил переменной лист ссылку на первый лист книги (без этого слова присвоение ОБЪЕКТА вызовет ошибку). Впиши слово: Dim лист As Worksheet : ___ лист = Sheets(1)

Подсказка: Обычным переменным (числа, строки) значение присваивают через =, а ссылку на ОБЪЕКТ — только через специальное ключевое слово перед =.

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

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Задание. Range(«A1»).Value = 10 : Range(«B1»).Value = Range(«A1»).Value * 2 : x = Range(«B1»).Value — чему равен x? Впиши число.

Подсказка: B1 читает значение из A1 и удваивает его.

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

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Контрольный вопрос. Cells(2, 3) в VBA обращается к…

Авторой открытой книге и третьему листу
Бдиапазону размером 2 строки на 3 столбца
Вячейке A1, увеличенной ровно в 2 раза
Гячейке во 2-й строке и 3-м столбце (C2)

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

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Контрольный вопрос. Application.WorksheetFunction.Sum(Range(«A1:A10»)) в коде VBA делает то же самое, что в обычном Excel делает…

Аусловное форматирование
Бкоманда «Сортировка»
Вформула =СЧЁТ(A1:A10)
Гформула =СУММ(A1:A10)

Подсказка: WorksheetFunction.Sum — это ровно та же функция СУММ, вызванная из кода.

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Контрольный вопрос. Зачем нужен именованный диапазон (ThisWorkbook.Names.Add)?

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

Подсказка: Имя — это просто удобный ярлык для адреса ячейки/диапазона.

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Задание. Дан код:
For i = 1 To 5<br>  Cells(i, 1).Value = i * 10<br>Next i<br>Range("B1").Value = Application.WorksheetFunction.Sum(Range("A1:A5"))

Какое значение окажется в ячейке B1? Впиши число.

Подсказка: Цикл кладёт в A1:A5 числа 10, 20, 30, 40, 50 — сложи их.

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

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

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

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

АWorkbook, Worksheet и Range образуют вложенную иерархию
БRange(«A1»).Value читает или записывает значение ячейки
Ву объектов есть и свойства (что хранят), и методы (что делают)
ГSheets(1) всегда означает активный в данный момент лист
Дименованные диапазоны работают только в VBA, но не в обычных формулах

Подсказка: Два варианта приписывают объектам поведение, которого у них нет.

На курсе задания проверяются автоматически. Решить первое задание бесплатно →  ·  Подобрать курс

Итог

Итог. Workbook содержит Worksheet, Worksheet содержит Range/Cells — та же иерархия, что и вручную, только через код. Save/SaveAs/Close управляют книгой, Sheets.Add/Delete — листами, For Each перебирает коллекции. Range(«A1»).Value и Cells(row, column) читают/пишут значения; WorksheetFunction даёт доступ к формулам Excel из кода; именованные диапазоны — удобные ярлыки для адресов.
Хочешь глубже? Больше приёмов VBA с подробными примерами — в статье «VBA для Excel: основные приёмы работы».

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

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