Курс MS Excel предназначен для всех кому необходимо работать с большим количеством данных и отчетов

Read more

Изучите все возможности PowerPoint по подготовке стильных современных презентаций

Read more

Microsoft Project предназначен помочь менеджеру проекта в разработке и отслеживании выполнения задач .


циклы в VBA

Циклы и VBA

Цикл - это повторяющееся действие какой-либо операции.
Например, нам надо прибавить к одному и тому же числу значения от 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

При этом тот код, который у нас написан после цикла будет выполняться дальше.

Ещё один нюанс.
Если вы запустили цикл и он оказался бесконечным, то нажмите комбинацию кнопок 
Ctrl + Break.



Источник: http://vbabesaba.com/index.htm
Категория: Обучение VBA | Добавил: Sergey_Haruk (15.11.2019)
Просмотров: 145 | Теги: код макроса, работа в VBA, Обучение, операторы VBA, Цикл Do, VBA, на практике, Цикл For Each, циклы, применение VBA, использование VBA на примерах, Цикл For, примеры макросов | Рейтинг: 4.0/1
Всего комментариев: 0
Имя *:
Email *:
Код *: