Цикл For позволяет ускорить и автоматизировать рутинные, повторяющиеся действия, а также лучшить читаемость кода.
Существует две формы цикла For – это “For … Next” и “For Each … Next”. Для начала разберемся с первым вариантом.
Цикл For … Next
Данный цикл последовательно изменяет значение переменной в рамках заданного диапазона. После смены переменной выполняются определенные действия, прописанные в теле цикла. Приведем пример:
For j = 1 To
m = j * j
MsgBox (m)
Next
В данном случае в качестве переменной цикла используется j, значение которой последовательно, после каждого выполнения изменяется с 1 до 5 (1, 2, 3, 4, 5). В самом теле цикла происходит расчет переменной m, которая представляет собой квардрат числа j. После расчета переменная m выводится в диалоговое окно пользователю.
Также, в качестве дополнения к этому циклу, если необходимо вывести не только целые числа, но и десятичные, с шагом 0,25 к примеру, то необходимо будет добавить ключевое слово “Step“.
For j = 1 To 5 Step 0.25
m = j * j
MsgBox (m)
Next
Стоит обратить внимание, что цикл может также идти по убыванию с отрицательным шагом.
For j = 1 To 5 Step -0.25
m = j * j
MsgBox (m)
Next
Цикл For Each … Next
По своей сути, этот цикл схож с предыдущим, различие лишь в том, что цикл “For Each” вместо счетчика значений принимает какую-то группу объектов, это может быть диапазон ячеек, листы книги или же ранее созданный массив.
К примеру, необходимо удалить все листы в книге, кроме листа с названием “План”. При этом код будет выглядеть следующим образом:
Dim Wheet As Worksheet 'объявляем переменную wSheet как лист
For Each wSheet In Worksheets 'создаем цикл, где в качестве группы объектов указываем все листы
If wSheet.Name <> "План" Then wSheet.Delete 'создаем условие, что если имя листа не равно "План", то его нужно удалить
Next wSheet
Данный код будет работать на листах активной книги, если необходимо указать конкретную книгу, можно внести небольшие изменения в код.
Код ниже будет работать в книге, где расположен сам макрос:
For Each wSheet In ThisWorkbook.Worksheets
Если необходимо пройти по листам определенной книги (книга при этом должна быть открыта), но можно до выполнения цикла воспользоваться методом Workbooks.Open, чтобы открыть определенную книгу.
For Each wSheet In Workbooks("MyBook.xls").Worksheets
Задача
Необходимо пройтись циклом по диапазону ячеек, проверить, является ли остаток при делении нулевым, и если это так, то вернуть в соседний столбец результат деления. В конце приложен файл с самим заданием, а также с решением.
Ниже находится файл с заданием и решением к нему.