Цикл - это повторяющееся действие какой-либо операции.
Например, нам надо прибавить к одному и тому же числу значения от 1 до 100. ЕСтественно неудобно будет писать каждую операцию вручную. Вот именно для этого и придумали циклы, без которых никуда.
Посмотрим какие они бывают.
Цикл For ... Next
Цикл For ... Next самый распространённый. Потому, что он самый простой. записывается в макросе он следующим образом:
Sub Primer()
.........
For i = 1 To 100 Step 1
r = r + i
Next i
.........
End Sub
For - Объявляет наш цикл;
i - это переменная которая принимает разные значения (равносильно нашему От);
To - это конечное значение переменной (равносильно нашему До);
Step - это шаг цикла;
Next - это конец нашего цикла, он переводит цикл на начало For.
Читается это так: Цикл от 1 до 100 с шагом в еденицу. То-есть в начале выполнения нашего цикла i = 1, далее происходит какое-то выражение или оперция и значение Next переводит переменную i на следующее значение. В данном случае шаг Step 1, т.е. следующее значение i будет равняться 2. И так далее. Как только i достигнет своего сотого значения (так как до 100 цикл), цикл прекратится выполняться и дальше пойдёт выполнение нашего программного кода, который стоит после цикла.
Приведём ещё один пример, сложим значения от 1 до 100 при помощи цикла:
Sub Primer()
Dim i As Byte
Dim r As Integer
For i = 1 To 100 Step 1
r = r + i
Next i
MsgBox "Сумма чисел от 1 до 100 равняется " & r, vbInformation, "Сумма"
End Sub
Если шаг вашего цикла равен 1, то Step можно не писать. Выглядеть это будет так:
Sub Primer()
Dim i As Byte
Dim r As Integer
For i = 1 To 100
r = r + i
Next i
MsgBox "Сумма чисел от 1 до 100 равняется " & r, vbInformation, "Сумма"
End Sub
Шаг Step может принимать не только положительные значения, но и отрицательные:
Sub Primer()
Dim i As Integer
Dim r As Integer
For i = 100 To 1 Step -1
r = r + i
Next i
MsgBox "Сумма чисел от 1 до 100 равняется " & r, vbInformation, "Сумма"
End Sub
а также дробные. Например так:
Sub Primer()
Dim i As Byte
Dim r As Integer
For i = 1 To 100 Step 1.5
r = r + i
Next i
MsgBox "Сумма чисел от 1 до 100 равняется " & r, vbInformation, "Сумма"
End Sub
Цикл For Each ... Next
Цикл For Each ... Next применяется когда требуется перебрать элекменты в какой либо группе, коллекции, массиве и т.п. Наприер перебрать все листы книги Excel, все ячейки в определённом диапазоне, или "пробежаться" по объектам.
Записывается он следующим образом:
For Each X In Y
....
Next X
For Each - начало нашего цикла;
X - это переменная в группе;
In - это синтаксис указывающий в какой группе необходимо перебирать элементы (равносильно нашему "смотри в");
Y - это группа;
Next - переводит цикл на начало;
К примеру, данным циклом можно посчитать количество листов в активной книге:
Sub Primer()
Dim Shet As Object
Dim r As Integer
For Each Shet In ActiveWorkbook.Sheets
r = r + 1
Next Shet
MsgBox "Количество листов в книге = " & r, vbInformation, "Справка"
End Sub
Или собрать все имена листов (попробуйте запустить данный код):
Sub Primer()
Dim Shet As Object
Dim r As String
For Each Shet In ActiveWorkbook.Sheets
r = Shet.Name
s = s & " " & r
Next Shet
MsgBox "В книге присутствуют следующие имена листов:" & _
vbNewLine & s, vbInformation, "Справка"
End Sub
vbNewLine - переносит текст на следующую строку сообщения.
& - отделяет текст от переменных (правило синтаксиса).
Цикл Do ... Loop
Цикл Do ... Loop означает: выполнять действие пока оно истинно или ложно.
Рассмотрим эти циклы.
Do While Loop
При проверке истинности цикл записывается следующим образом.
Sub Primer()
Dim X As Byte
Do While X < 10
X = X + 1
MsgBox "Как только X превысит значение 10 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
Loop
End Sub
При такой записи цикл будет выполняться до тех пор, пока Х истинно, то-есть меньше 10.
Do - это начало нашего цикла;
While - это говорит о том, что цикл проверяется на истинность;
X < 10 - это то условие истинности, которое мы задали;
Loop - возврощает цикл на его начало;
При этом он может записываться и так:
Sub Primer()
Dim X As Byte
Do
X = X + 1
MsgBox "Как только X превысит значение 10 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
Loop While (X < 10)
End Sub
Тут мы сначало открываем цикл, пишем ему какой-то алгоритм, и только потом проверяем его на истинность.
Do Until Loop
При проверке цикла на ложность, код записывается следующим образом:
Sub Primer()
Dim X As Byte
Do Until X > 5
MsgBox "Как только X превысит значение 5 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
X = X + 1
Loop
End Sub
При такой записи цикл будет выполняться до тех пор пока условие Х > 5 ложно. Как только Х превысит значение 5 и условие станет истинно, цикл прекратит выполняться.
Do - это начало нашего цикла;
Until - это говорит о том, что цикл проверяется на ложность;
X > 5 - это то ложное условие, которое мы задали;
Loop - возврощает цикл на его начало;
При этом он тоже может записываться наоборот:
Sub Primer()
Dim X As Byte
Do
X = X + 1
MsgBox "Как только X превысит значение 6 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
Loop Until (X > 5)
End Sub
То-есть сперва мы выполняем код, а потом проверяем на наше условие.
У некоторых может возникнуть такой вопрос: А как выйти из цикла экстренно, не заканчивая его выполнение? Например мы нашли наше ложное или истинное условие и хотим его покинуть.
Это тоже предусмотренно. При помощи команды Exit Do.
Выглядеть это будет так:
Sub Primer()
Dim X As Byte
Do
If X = 3 Then Exit Do
X = X + 1
MsgBox "Как только X превысит значение 6 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
Loop Until (X > 5)
MsgBox "Всё!!!"
End Sub
При этом тот код, который у нас написан после цикла будет выполняться дальше.
Цикл With – End With
Конструкция With – End With позволяет выполнять несколько операций над одним объектом. Для анализа работы посмотрим, как работают следующие процедуры:
Sub changeFont()
Selection.Font.Name = "Times New Roman"
Selection.Font.FontStyle = "Bold Italic"
Selection.Font.Size = 12
Selection.Font.Underline = xlUnderlineStyleSingle
Selection.Font.ColorIndex = 5
End Sub
Эту процедуру можно записать с помощью With – End With. Процедура работает точно также:
Sub changeFont2()
With Selection.Font
.Name = "Times New Roman"
.FontStyle = "Bold Italic"
.Size = 12
.Underline = xlUnderlineStyleSingle
.ColorIndex = 5
End With
End Sub
Смысл использования второго варианта заключается в том, что он более быстрый с точки зрения обработки операций в процедуре, хотя и менее понятен с точки зрения языка програмирования.
Ещё один нюанс.
Если вы запустили цикл и он оказался бесконечным, то нажмите комбинацию кнопок Ctrl + Break.
< < Предыдущая глава | Следующая глава > > |