Цикл For Each…Next — один из самых читаемых, надёжных и «элегантных» инструментов в арсенале любого, кто автоматизирует работу в Excel с помощью VBA. В этой статье мы разберём расширенные и практичные примеры его использования: от перебора листов книги до обработки фигур на листе. Шаг за шагом — от простого к более гибким сценариям.
🧩 Что делает For Each…Next таким особенным?
Цикл особенно хорош в ситуациях, когда нужно выполнить действия с каждым элементом внутри коллекции:
- рабочие листы;
- ячейки;
- фигуры;
- диаграммы;
- комментарии.
Главное — помнить:
коллекция — это группа объектов, объект — конкретный элемент коллекции.
🔁 Пример 1: Выводим список всех листов в книге
Допустим, вы хотите вывести имена всех листов на лист отчёта. Очень удобно при автоматизации структуры книги:
Код VBA:
Sub MyForEach1()
Dim ws As Worksheet
Dim x As Integer
x = 1
For Each ws In ThisWorkbook.Sheets
Cells(x, 1).Value = ws.Name
x = x + 1
Next ws
End Sub
🔎 Каждое имя листа будет выведено в столбец A: начиная с A1, затем A2 и т.д.
Полезно при инвентаризации книги или создании оглавлений автоматически.
🔄 Пример 2: Получаем имена всех форм на листе
Часто формы (фигуры, кнопки) используются в качестве интерактивных элементов. Нужно быстро собрать их список.
Код VBA:
Sub MyForEach2()
Dim shp As Shape
Dim x As Integer
x = 1
For Each shp In Sheets("Data").Shapes
Cells(x, 2).Value = shp.Name
x = x + 1
Next shp
End Sub
🟡 В столбце B появятся имена всех форм, даже если они не подписаны визуально.
📌 К этому моменту, если материал оказался полезным — поддержите наш канал подпиской.
Это мотивирует выпускать больше живых и практичных гайдов по VBA.
А в комментариях расскажите, какие объекты чаще всего перебираете вы?
🖼 Пример 3: Форматируем все диаграммы на листе
Если у вас много графиков и их нужно привести к одному стилю — можно сделать это за пару строк кода:
Код VBA:
Sub FormatCharts()
Dim ch As ChartObject
For Each ch In Sheets("Отчёт").ChartObjects
ch.Chart.ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 255, 204)
Next ch
End Sub
🧽 Диаграммы получат светло-жёлтую заливку — так гораздо проще воспринимать визуальные данные в едином стиле.
📬 Пример 4: Собираем все комментарии с листа
Макрос, который собирает все комментарии в отдельный список. Удобно при совместной работе и проверке замечаний:
Код VBA:
Sub CollectComments()
Dim cmt As Comment
Dim x As Integer
x = 1
For Each cmt In Sheets("Data").Comments
Cells(x, 3).Value = cmt.Author & ": " & cmt.Text
x = x + 1
Next cmt
End Sub
⚠️ Учтите: в новых версиях Excel используются современные комментарии (ThreadedComments), и данный код работает только с классическими.
🤔 For vs For Each: когда и что использовать?
СценарийИспользоватьПроход по индексам (строки)For i = 1 To NКоллекция объектов (листы, формы)For EachСтруктура не изменитсяЛюбойСтруктура может менятьсяFor Each ✅
🔑 For Each — безопасный и читабельный способ пройтись по всем объектам, особенно когда их количество и структура неизвестны заранее.
🧰 Заключение
Цикл For Each…Next — не просто удобство, а основа грамотной автоматизации Excel. С его помощью можно:
- быстро создавать отчёты;
- управлять внешним видом книги;
- взаимодействовать с объектами любой сложности.
💬 Расскажите в комментариях: какие коллекции вы чаще всего автоматизируете с помощью For Each?
И не забудьте подписаться на канал, чтобы не пропустить следующие материалы — вас ждут фишки, приёмы и мощные макросы на каждый день.