Простой одинарный цикл
- Dim i As Integer
- For i = 1 To 6
- Cells(i, 1).Value = 100
- Next i
В данном примере ячейки в первом столбце в строках от одного до 6 будут заполнены значением 100
Одинарный цикл используется для изменения значений в одной строке или в одном столбце.
В рассмотренном примере строки между for i и next i повторяются 6 раз. Начинается цикл выполняться со значения i=1 и в ячейку Cells(i,1) записывается значение 100. Далее программа доходит до оператора next i который увеличивает значение i на один, теперь i=2 и выполнение программы переходит снова к оператору for. Оператор for проверяет не превысило ли i конечное значение и если нет то выполняется тело цикла для значения 2. Так цикл выполняется 6 раз. И на 7 раз происходит выход из цикла и программа заканчивается.
Двойной цикл
- Dim i As Integer, j As Integer
- For i = 1 To 6
- For j = 1 To 2
- Cells(i, j).Value = 100
- Next j
- Next i
В данном примере телом цикла for i является еще один цикл for j который выполняется для каждого значения i в результате для первой строки i=1 выполняется цикл j в котором записываются значения 100 в первый и второй столбец так как j изменяется от 1 до 2. Далее мы переходим к следующему i и все повторяется для второй строки. В итоге выполнения цикла значениями 100 заполнятся два столбца.
Данный алгоритм применяется для работы с таблицами.
Тройной цикл.
- Dim c As Integer, i As Integer, j As Integer
- For c = 1 To 3
- For i = 1 To 6
- For j = 1 To 2
- Worksheets(c).Cells(i, j).Value = 100
- Next j
- Next i
- Next c
В данном примере используется тройной цикл. В нем для первых трех листов выполняется двойной цикл. В результате в первых трех листах будут записаны значения 100 в 6 строк для первых двух столбцов
Do While цикл
Для начала выполнения задания введите случайные 6 чисел в первый столбец.
- Dim i As Integer
- i = 1
- Do While Cells(i, 1).Value <> ""
- Cells(i, 2).Value = Cells(i, 1).Value + 10
- i = i + 1
- Loop
Данный цикл выполняется до тех пор пока значение ячейки не пустое. Цикл while выполняется до тех пор пока выполняется условие которое идет после него ( в нашем случае пока ячейка не пустая. Cells(i, 1).Value <> «»). Такой цикл подойдет когда мы работаем с неизвестным количеством строк.
Пример выполнения программы.
Добавьте значения в первый столбец в строки 7 и 8 и заново запустите макрос. Он выполнится для этих строк тоже так как они не пустые.
Цикл for each для Range
- Dim rng As Range
- Dim Cell As Range
- Set rng = Range("A1:B6")
- For Each Cell In rng
- Cell.Value = Cell.Value * Cell.Value
- Next Cell
В данном примере мы задаем Range и возводим каждую ячейку этого диапазона в квадрат.
Цикл For Each переводится для каждого значения,
в нашем случае для каждой ячейки из диапазона (For Each Cell In rng)
Выполните цикл и проверьте что все значения из диапазона возведены в квадрат.
Проверка всех строк в столбце
- For i = 1 To Rows.Count
- If Cells(i, 1).Value < 5 And Not IsEmpty(Cells(i, 1).Value) Then
- Cells(i, 1).Font.Color = vbRed
- End If
- Next i
В данном примере мы используем Rows.Count — количество строк. Для Excel 2010 максимальное количество строк = 1 миллион. И в этом примере все не пустые строки со значениями <5 будут окрашены в красный цвет.