Метка: циклы

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

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

    1. Dim i As Integer
    2. For i = 1 To 6
    3. Cells(i, 1).Value = 100
    4. Next i
    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 раз происходит выход из цикла и программа заканчивается.

    Двойной цикл

    1. Dim i As Integer, j As Integer
    2. For i = 1 To 6
    3. For j = 1 To 2
    4. Cells(i, j).Value = 100
    5. Next j
    6. Next i
    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 заполнятся два столбца.

    Данный алгоритм применяется для работы с таблицами.

    Тройной цикл.

    1. Dim c As Integer, i As Integer, j As Integer
    2. For c = 1 To 3
    3. For i = 1 To 6
    4. For j = 1 To 2
    5. Worksheets(c).Cells(i, j).Value = 100
    6. Next j
    7. Next i
    8. Next c
    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 чисел в первый столбец.

    1. Dim i As Integer
    2. i = 1
    3. Do While Cells(i, 1).Value <> ""
    4. Cells(i, 2).Value = Cells(i, 1).Value + 10
    5. i = i + 1
    6. Loop
    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

    1. Dim rng As Range
    2. Dim Cell As Range
    3. Set rng = Range("A1:B6")
    4. For Each Cell In rng
    5. Cell.Value = Cell.Value * Cell.Value
    6. Next Cell
    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)

    Выполните цикл и проверьте что все значения из диапазона возведены в квадрат.

    Проверка всех строк в столбце

    1. For i = 1 To Rows.Count
    2. If Cells(i, 1).Value < 5 And Not IsEmpty(Cells(i, 1).Value) Then
    3. Cells(i, 1).Font.Color = vbRed
    4. End If
    5. Next i
    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 будут окрашены в красный цвет.