Циклы в Visual Basic (VBA)

Автор: | 29.05.2016

Простой одинарный цикл

Dim i As Integer

For i = 1 To 6
    Cells(i, 1).Value = 100
Next i

В данном примере ячейки в первом столбце в строках от одного до 6 будут заполнены значением 100

Одинарный цикл используется для изменения значений в одной строке или в одном столбце.

single-loop

В рассмотренном примере строки между 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 цикл

any-number-of-rows

Для начала выполнения задания введите случайные 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 <> «»). Такой цикл подойдет когда мы работаем с неизвестным количеством строк.

advanced-do-while-loop

Пример выполнения программы.

Добавьте значения в первый столбец в строки 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 будут окрашены в красный цвет.