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

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

Оглавление

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

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