Найти в Дзене
Макрос решает

Цикл For Each…Next в VBA: ещё больше практики на понятных примерах

Цикл For Each…Next — один из самых читаемых, надёжных и «элегантных» инструментов в арсенале любого, кто автоматизирует работу в Excel с помощью VBA. В этой статье мы разберём расширенные и практичные примеры его использования: от перебора листов книги до обработки фигур на листе. Шаг за шагом — от простого к более гибким сценариям. Цикл особенно хорош в ситуациях, когда нужно выполнить действия с каждым элементом внутри коллекции: Главное — помнить:
коллекция — это группа объектов, объект — конкретный элемент коллекции. Допустим, вы хотите вывести имена всех листов на лист отчёта. Очень удобно при автоматизации структуры книги: Код 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 и т.д.
Полезно при инвентаризации книги или создании оглавлений автоматически. Часто формы (фигуры, кнопки) использую
Оглавление

Цикл 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?

И не забудьте
подписаться на канал, чтобы не пропустить следующие материалы — вас ждут фишки, приёмы и мощные макросы на каждый день.