Цикл For в VBA

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

Задача

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

задача по циклу for

Ниже находится файл с заданием и решением к нему.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Добавить комментарий