Книга: VBA для чайников

Вложенные циклы For... Next

Вложенные циклы For... Next

Подобно другим управляющим структурам VBA, циклы For. . .Next можно вкладывать один в другой - или в другие управляющие структуры, - так глубоко, как это необходимо. Следующий совершенно бесполезный фрагмент программного кода иллюстрирует эту возможность:

Dim sngC ' наверное, C означает "случайное число"

Randomize ' инициализация генератора случайных чисел

For A = 1 To 5

sngC = Rnd()

For B = 1 To 5

Debug.Print sngC * Rnd()

Next

Next A

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

1. Предварительная подготовка.

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

2. Начало внешнего цикла For. . .Next.

VBA вызывает функцию Rnd, чтобы присвоить переменной sngC случайное значение.

3. Начало внутреннего цикла For. . .Next.

Этот цикл вычисляет пять других чисел, повторяя вызов функции Rnd при каждом проходе цикла. Результат отображается в окне Immediate.

4. Завершение внутреннего цикла после выполнения им всех пяти вычислений.

Теперь снова продолжится выполнение внешнего цикла. Подчиняясь оператору Next

A, VBA возвращается в начало внешнего цикла.

5. Пп. 2 и 3 повторяются еще для четырех проходов внешнего цикла.

Этот пример, вероятно, тривиален, но его можно заставить выполнять очень полезную работу, если немного подправить. Допустим, вам нужно создать мультимедиа-программу, случайным образом выбирающую пять компакт-дисков и проигрывающую по пять случайным образом выбранных фрагментов с каждого из дисков. В предположении, что вы знаете, как программировать выбор компакт-дисков и воспроизведение записей, предыдущий пример будет как раз подходящей заготовкой.

Использовать вложенные циклы For. . .Next очень удобно при обработке многомерных массивов, если организовать циклы так, чтобы каждый из них соответствовал одному измерению массива.

Оглавление книги


Генерация: 0.084. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз