Объекты 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, Worksheet содержит Range/Cells
БRange содержит Worksheet, Worksheet содержит Workbook
Ввсе три объекта независимы друг от друга
ГCells содержит Workbook

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

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

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

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

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

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

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

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

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

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

Подсказка: По официальной документации 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-м столбце (то есть C2)
Бячейке A1, увеличенной в 2 раза
Вдиапазону из 2 строк и 3 столбцов
Гвторой книге, третьему листу

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

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

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

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

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

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

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

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

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

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

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

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

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

Задание. Дан код:
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 из кода; именованные диапазоны — удобные ярлыки для адресов.

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

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