Метка: циклы

  • Циклы в Visual Basic (VBA)

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

    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 будут окрашены в красный цвет.