Хотите автоматизировать повторяющиеся задачи в Excel с помощью VBA? Узнайте, как использовать цикл For Each для эффективного управления данными в электронных таблицах.

Циклы и VBA идут рука об руку, и тому есть веская причина. При работе с объектами Microsoft Office, такими как рабочие книги, рабочие листы и диапазоны, циклы могут помочь вам относительно легко переключаться между каждым из них.

Хотя более или менее все циклы VBA хорошо работают с объектами, цикл «для каждого» является одним из лучших вариантов для работы с коллекциями объектов. Если вы новичок в Excel VBA и хотите освоить цикл for each, вы можете быстро изучить некоторые из этих примеров. Вот все, что вам нужно знать об этой типичной петле.

Синтаксис каждого цикла

Синтаксис цикла for each очень похож на обычный цикл for в Excel VBA. Вот синтаксис:

Для каждой переменной_имя в объектной_коллекции

[заявление]

[заявление]

[заявление]

Следующая переменная_имя

Цикл начинается с ключевого слова «для каждого»; вы можете использовать любое имя переменной, за которым следует коллекция объектов. Объектом в цикле for each могут быть ячейки, диапазоны, листы и даже рабочие книги. Такова красота этой петли; это дает вам возможность работать с различными коллекциями Excel.

instagram viewer

Цикл циклически перебирает каждое значение коллекции и сохраняет ссылку в определенном имени переменной. После выполнения VBA выполняет сохраненные операторы в цикле и переходит к следующему объекту в коллекции (т. следующий ключевое слово здесь полезно). Давайте разберемся со структурой кода на простом примере.

Как использовать цикл For Each в Excel VBA

Предположим, вы хотите напечатать число в ячейках от A1 до A10. Лучший подход — использовать цикл for each с функцией диапазона и позволить коду сделать все необходимое. Вот как вы можете выполнить эту простую задачу:

  1. Откройте редактор кода VBA, нажав Альт + F11.
  2. Вставьте модуль, нажав кнопку Модуль вариант в рамках Вставлять вкладка
  3. Создайте подпрограмму с помощью команды sub() в окне модуля редактора кода. Убедитесь, что вы присвоили подпрограмме осмысленное имя. Для этого примера вы можете использовать имя for_each_loop.

Теперь, когда с основами покончено, пора приступить к написанию кода. В подпрограмме введите следующие команды:

Тусклая ячейка как диапазон

Для каждой ячейки в Листы("Лист1").Диапазон("А1:А10")

ячейка.значение = 10

Следующая ячейка

Когда код выполняется, с переменная будет хранить значение A1. Затем, когда он переходит к оператору внутри цикла, он оценивает команду и вводит значение 10 в определенную ячейку, то есть в ячейку A1.

Наконец, когда он переходит к ключевому слову Next, он переходит к следующему значению, то есть к ячейке A2. Цикл выполняется до тех пор, пока не достигнет ячейки A10. Это окончательный результат:

Использование цикла с объектами: ячейки, листы и рабочие книги

В Excel есть три основных типа объектов, с которыми вы регулярно работаете. Это ячейки, листы и книги. Вот как можно использовать цикл со всеми тремя типами объектов.

Совместная работа с ячейками и циклами

Предположим, вы хотите добавить значение и некоторые условия форматирования к диапазону ячеек в Sheet1. В качестве первого шага вам необходимо определить условия внутри цикла, а затем команды форматирования.

Введите следующий код в подпрограмму.

Подпрограмма for_each_loop()

Дим с Как Диапазон

Для каждого c на листах ("Лист1").Диапазон("А1:А10")

С с

.Значение = 10

.Шрифт. Цвет = vbRed

.Шрифт. Жирный = Истинный

.Шрифт. Зачеркнутый = Истинный

КонецС

Следующий с

Конец Саб

с Функция полезна при выполнении нескольких функций с одним конкретным объектом. Поскольку вы хотите выполнить ряд задач с помощью переменной c, вы можете объединить их все, используя функцию with..end with.

Цикл приравнивает значение c к значению каждой ячейки и вводит значение как 10. Кроме того, он изменяет цвет ячейки на красный, выделяет значение жирным шрифтом и перечеркивает его. После завершения всех шагов он переходит к следующему определенному значению в диапазоне.

Использование цикла для управления листами

Как и в приведенном выше примере, вы можете использовать цикл for each для управления листами. Как насчет изменения имени Sheet1 на Sheet3 с помощью VBA?

Вы можете использовать следующий код для переименования существующего рабочего листа в Excel с помощью VBA:

Подпрограмма for_each_loop_sheets()

ДляКаждыйштВЭта рабочая тетрадь.Листы

Если шт. Имя = "Лист1" Затем

шт. Имя = "Лист3"

КонецЕсли

Следующий шт

Конец Саб

Код перебирает каждый лист в рабочей книге и проверяет имя каждого листа. Если он встречает имя Лист1, он меняет его на Лист3. Он проходит через оставшиеся листы, если таковые имеются, в рабочей книге. Как только выполнение кода достигает последнего листа, оно выходит из цикла и подпрограммы.

Среди некоторых других распространенных применений вы можете объединить несколько рабочих листов с помощью VBA и обновлять содержимое на одном листе с помощью циклов.

Переключение между книгами с помощью цикла

Наконец, вы можете использовать цикл for each для переключения между разными книгами и выполнения определенных задач. Продемонстрируем эту функцию на примере.

Вы можете использовать команды VBA, чтобы добавить три новые книги и закрыть все открытые вместе. Вот как это сделать:

Sub loop_wrkbook()

Тусклая рабочая тетрадь как рабочая тетрадь

Рабочие тетради.Добавлять

Рабочие тетради.Добавлять

Рабочие тетради.Добавлять

Для каждой рабочей книги в рабочих тетрадях

рабочая тетрадь.Закрывать

Следующая рабочая тетрадь

Конец Саб

Приведенный выше код также закроет вашу книгу макросов; убедитесь, что вы сохранили свои коды перед запуском этого кода.

Поскольку циклы имеют несколько применений, вы также можете объединить данные из нескольких книг в одну книгу.

Использование вложенного оператора IF с циклом

Как и в приведенном выше примере, вы можете использовать оператор IF в цикле для проверки определенных условий. Давайте изменим цвет фона ячейки на основе значений ячейки.

В ячейках A1:A20 есть несколько случайных чисел. Вы можете написать цикл для циклического перебора каждой заданной ячейки в диапазоне; если значение ячейки меньше 10, цвет ячейки должен измениться на красный. Если значение ячейки превышает 10, оно должно стать зеленым. Используйте для этой цели следующий код:

Sub loop_w_if()

Дим с Как Диапазон

Для каждого c на листах ("Лист4").Диапазон("А1:А20")

Еслис.Ценить < 10 Затем

в. Интерьер. Индекс цвета = 3

Еще: с. Интерьер. Индекс цвета = 4

КонецЕсли

Следующий с

Конец Саб

Вот как выглядит результат:

Использование циклов в Excel VBA

Excel VBA не ограничивается только циклом for each. Существует множество полезных циклов, которые позволяют с легкостью выполнять различные функции. Попрощайтесь с рутинными, ручными задачами, поскольку циклы VBA, такие как цикл for, do while и do until, вступают в действие циклы, которые облегчают вашу жизнь.