double arrow

Операторы. Можно помещать структуры управления внутрь других структур управления (например, блок If Then внутрь цикла For Next)


Loop Until [условие]

Вложенные циклы VBA

Можно помещать структуры управления внутрь других структур управления (например, блок If…Then внутрь цикла For…Next). Говорят, что структура управления, помещенная внутрь другой структуры управления, является вложенной.

Глубина вложения управляющих структур в VBA не ограничена. Для улучшения читаемости кода принята практика смещения тела конструкции принятия решения или цикла в программе в случае использования вложенных структур управления.

При вложении в цикл одного или несколько других циклов говорят о вложенных циклах, в которых различают внешние (охватывающие) и внутренние (вложенные) циклы.

Пример суммирования элементов Aij матрицы A(n,m) построчно.

Sub пример5()

Dim a() As Single, s() As Single

Dim n As Integer, m As Integer

Dim i As Integer, j As Integer

Call read("a1", n): Call read("b1", m)

ReDim a(1 To n, 1 To m), s(1 To n)

'Чтение матрицы

For i = 1 To n

For j = 1 To m

Call readcell(i + 1, j, a(i, j))

Next j

Next i

'Вычисление

For i = 1 To n

s(i) = 0

For j = 1 To m

s(i) = s(i) + a(i, j)

Next j

Call outcell(i + 1, m + 1, s(i))

Next i

End Sub

Заметим, что первый оператор Next закрывает внутренний цикл For, а последний оператор Next закрывает внешний цикл For. Точно так же и для вложенных операторов If, операторы End If автоматически применяются для закрытия ближайшего к нему оператора If. Вложенные структуры Do…Loop работают подобным же образом: самый дальний оператор Loop соответствует самому дальнему оператору Do.




При вводе/выводе элементов двумерного массива на рабочий лист Microsoft Excel удобно применять пользовательские процедуры ввода/вывода:

Sub readcell(i As Integer, j As Integer, val As Variant)

val = Лист1.Cells(i, j).Value

End Sub

Sub outcell(i As Integer, j As Integer, val As Variant)

Лист1.Cells(i, j).Value = val

End Sub

где i - номер строки, j - номер столбца рабочего листа.

Выход из структур управления

Оператор Exit позволяет выходить непосредственно из цикла For, цикла Do, процедуры Sub или процедуры Function. Синтаксис оператора Exit прост:

For counter = start To end [Step -increment]

[блок операторов]

[Exit For]

[блок операторов]

Next [counter]

Do [(While | Until) условие]

[блок операторов]

[Exit Do]

[блок операторов]

Loop

Exit For внутри цикла For и Exit Do внутри цикла Do могут появиться сколько угодно раз.

Оператор Exit Do работает со всеми разновидностями синтаксиса цикла Do.

Операторы Exit For и Exit Do применяются, если необходимо завершить цикл немедленно, не продолжая дальнейших итераций или не ожидая выполнения блока операторов в теле цикла.

При использовании оператора Exit для выхода из цикла значения переменной цикла зависят от того, каким образом завершается выполнение цикла:

1) при нормальном завершении цикла значение переменной цикла имеет на единицу больше верхней границы числа циклов;

2) при преждевременном завершении цикла переменная цикла сохраняет свое значение, которое она получила с учетом обычных правил;



3) при завершении цикла по концу набора переменная цикла имеет значение Nothing (Ничего), если она является переменной типа object (Объект), или значение Empty (Пусто), если она является переменной типа Variant.

2.4. Оператор цикла с предусловием While…Do

Применяется для организации циклов с неизвестным заранее числом повторений, логика которых предполагает выполнение цикла пока истинно некоторое условие.

Синтаксис оператора WHILE:







Сейчас читают про: