Вход/Регистрация
VBA для чайников
вернуться

Каммингс Стив

Шрифт:

Циклы For... Next и массивы

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

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

Dim intМассивКвадратов (14) As Integer

For a = 0 To 14

intMacсивКвадратов( a) = a * a

Next a

Этот пример программного кода начинается с объявления массива из 15 целых значений (15, а не 14, поскольку обычно VBA приписывает первому элементу в массиве индекс 0). Затем используется цикл For . . . Next, в котором каждому элементу массива, от 0 до 14, присваивается значение. Обратите внимание на то, что переменная а используется не только как счетчик, но и как индекс массива, указывающий на номер элемента в массиве.

Вложенные циклы 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 очень удобно при обработке многомерных массивов, если организовать циклы так, чтобы каждый из них соответствовал одному измерению массива.

Немедленный выход с помощью Exit For

Оператор Exit For предназначен для немедленного прекращения выполнения цикла до того, как программа доберется до его конца. Обычно этот оператор используется в условном выражении (If . . . Then или Select Case), вложенном в главный цикл For . . .Next.

Удобно использовать Exit For, когда проверяются массивы, есть ли в них недопустимые значения, когда неправильные данные приводят к прекращению выполнения процесса.

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

For р = 1 То varДлинаМассива

If varЦена(р) - "Здесь был Ваня!" Then

MsgBox "Данные испорчены."

Exit For

End If

varЦена(р) = varЦена(р) * sngCOLA

Next p

Задание шага цикла

Полный синтаксис оператора For. . .Next включает необязательное ключевое слово Step (шаг) в первой строке структуры, как, например, в следующем фрагменте программного кода:

  • Читать дальше
  • 1
  • ...
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: