АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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

Читайте также:
  1. Вложенные циклы.

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

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

 

Рис. 28. Результат программы примера 2.

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

Рассмотрим пример суммирования элементов 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 для выхода из цикла значения переменной цикла зависят от того, каким образом завершается выполнение цикла:

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

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

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

Циклы For применяют в тех случаях, когда количество проходов и диапазон изменения счётчика цикла заранее известны. Циклы While предназначены для ситуаций, когда количество проходов цикла заранее не известно, но зато известно условие выхода из цикла. Синтаксис цикла While:

Do While Условие_выхода
Группа операторов
Loop

Do
Группа операторов
Loop While Условие_выхода

Отличие между ними заключается в том, что условие выхода проверяется в одном случае перед очередным проходом, а в другом случае - после выхода. Если в цикле опустить условие выхода или это условие всегда выполняется, то получится бесконечный цикл. Например вот такой:

Do While 2 > 1
Degub.Print "Вечный цикл"
Loop

Следующий пример показывает применение конструкции Do while:

Dim n As Integer
n = 100
Do While n >= 0
n = n - 1
Debug.Print n
Loop

С помощью операторов Exit... можно осуществить досрочный выход из цикла вне зависимости от значения, которое имеет в данный момент условие выхода. Вот такой пример:

Dim n As Integer
n = 10
Do While n > 1
n = n - 1
Debug.Print n
If n = 5 Then Exit Do ' Если счётчик = 5, то 'выходим из цикла
Loop

Рассмотрим примеры вложенных циклов:

Пример 1. Рассчитать сумму цифр от 1 до 100 (рис. 29.).

 

Рис. 29. Результат программы примера 1.

 

Пример 2. Создать функцию, которая вычисляет сумму чисел от заданного числа до конечного с шагом 4.

 

Контрольные вопросы

1. Назовите и опишите основные конструкции циклов VBA? В чем их сходство и отличие?

2. Опишите конструкцию цикла For… Next, Do While, Exit?

3. Что такое вложенный цикл и какова последовательность описания этих циклов в программе?


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)