Sibprompost.ru

Стройка и ремонт
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Циклы со счетчиком vba

Циклы со счетчиком vba

При создании процедур и функций часто возникают ситуации, когда одни и те же действия требуется повторить несколько раз. Для описания повторного исполнения инструкции или группы инструкций пользуются специальными управляющими конструкциями VBA — циклами. Циклы подразделяются на два типа: с управляющим условием и с управляющим перечислением.

В циклах с управляющим условием инструкция или группа инструкций по­вторяется до тех пор, пока не будет выполнено управляющее условие. По на­званию инструкции, составляющей основу этой управляющей конструкции, такие циклы называются циклами Do . В зависимости от типа управляющего условия и времени его проверки (относительно выполнения повторяющихся инструкций) различают четыре вида циклов Do . В листинге 14.10 приведены примеры использования всех четырех видов цикла Do для решения одной и той же задачи: сколько раз подряд из числа 25 можно извлечь квадратный корень, чтобы в результате получилось число, не превышающее единицу более , чем на одну сотую.

Листинг 14.10. Типы циклов Do

Dim число As Single

Dim повторения As Integer

‘Цикл Do первого типа

Do While число — 1 >= 0.01

число = Sqr (число)

повторения = повторения +1

‘Цикл Do второго типа

число = Sqr (число)

повторения = повторения + 1

Loop While число- 1 >= 0.01
MsgBox (повторения )
повторения = О
число =25

‘Цикл Do третьего типа

Do Until число- 1

число = Sqr (число)

повторения = повторения + 1
Loop

‘Цикл Do четвертого типа

число = Sqr (число)

повторения = повторения +1
Loop Until число- 1
MsgBox (повторения)
End Sub

В цикле Do первого типа условие проверяется до начала выполнения повторяю­щихся инструкций. Если условие оказывается выполненным (при вычислении логического выражения получается значение ИСТИНА), инструкции, заключен-

ные между инструкциями Do и Loop (тело цикла), выполняются однократно, затем управление снова передается на инструкцию Do , и процесс повторяется. Если управляющее условие не выполняется, то повторяющаяся группа инструкций пропускается и выполняется инструкция, следующая непосредственно за инст­рукцией Loop .

В цикле Do второго типа условие проверяется после выполнения тела цикла. Цикл повторяется, пока управляющее условие выполняется.

В цикле Do третьего типа условие проверяется до начала выполнения повто­ряющихся инструкций, но тело цикла выполняется только в том случае, когда управляющее условие не выполнено (при вычислении логического выражения получается значение ЛОЖЬ).

Читайте так же:
Испытательная коробка для счетчиков пуэ

В цикле Do четвертого типа условие проверяется после выполнения тела цик­ла. Цикл повторяется, пока управляющее условие не выполняется.

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

В циклах со счетчиком используется специальная переменная —- счетчик, зна­чение которой при каждом повторении тела цикла увеличивается или умень­шается на заданную величину (шаг цикла). Цикл завершается после того, как значение счетчика достигнет (или превысит) конечное значение счетчика цик­ла. Если в процессе выполнения цикла значения счетчика убывают (отрица­тельный шаг цикла), цикл завершается, когда значение счетчика станет рав­ным или меньшим конечного значения. В листинге 14.11 приведен синтаксис цикла со счетчиком и пример процедуры, вычисляющей суммы значений, со­держащихся в нечетных ячейках первого столбца первого листа текущей рабо­чей книги Excel (в пределах первых 10 ячеек).

Листинг 14.11. Цикл со счетчиком

For счетчик = начальное_значение То конечное _значение Step шаг_цикла

Dim I As Integer

For I = 1 To 10 Step 2

S = S + Application.Worksheets ( 1).Cells(I, 1).Value

Next I MsgBox (S)

В циклах по совокупности тело цикла поочередно повторяется для всех однород­ных объектов, составляющих массив или семейство. В этом случае в роли счет­чика выступает объектная переменная. В листинге 14.12 приведены синтаксис цикла и пример, в котором он используется для вывода на печать имен всех рабочих листов в текущей рабочей книге Excel .

Листинг 14.12. Цикл по совокупности

For Each элемент In совокупность

Sub Цикл _по_совокупности ()

Dim S As Worksheet

For Each S In Application.Worksheets

End Sub

Объект Debug совместно с методом Print позволяет выполнять печать в режиме
отладки. При использовании этого метода в процедуре значения аргументов метода
выводятся в специальное окно редактора VBA — Immediate . При выполнении программного кода вне среды редактора VBA , когда окно Immediate закрыто, инструк­ция, содержащая объект Debug , не оказывает никакого влияния на выполнение процедуры.

Использование операторов For Each. Next

Операторы For Each. Next повторяют блок операторов для каждого объекта в коллекции или каждого элемента массива. Visual Basic автоматически присваивает переменную при каждом выполнении цикла. Например, следующая процедура добавляет 10 к значению каждой ячейки в диапазоне A1 до A10.

Читайте так же:
Меркурий 230 постоянная счетчика

Указанный ниже код перебирает все элементы массива и устанавливает для каждого из них значение переменной-счетчика I.

Проход по диапазону ячеек

Цикл For Each. Next можно использовать для прохода по диапазону ячеек. Приведенная ниже процедура проходит по диапазону ячеек A1:D10 на листе Sheet1 и присваивает каждой ячейке, абсолютное значение которой меньше 0,01, значение 0 (ноль).

Выход из цикла For Each. Next до его завершения

Из цикла For Each. Next можно выйти с помощью оператора Exit For. Например, при возникновении ошибки можно использовать оператор Exit For в блоке True оператора If. Then. Else или оператора Select Case, который используется непосредственно для проверки ошибок. Если ошибка не возникает, оператор If…Then…Else получает значение False, и цикл продолжает работу.

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

Использование цикла For Each. Next для итерации в классе VBA

Циклы For Each. Next осуществляют итерацию не только в массивах и экземплярах объекта Collection. Они также могут выполнять итерацию в созданном вами классе VBA.

Ниже приведен пример, в котором показано, как это сделать.

Создайте модуль класса в редакторе Visual Basic (VBE) и присвойте ему имя CustomCollection. cc1

Вставьте следующий код в только что созданный модуль.

Экспортируйте этот модуль в файл и сохраните его в локальном расположении. cc2

После экспорта модуля откройте экспортированный файл, используя текстовый редактор (программы Блокнот в Windows должно быть достаточно). Содержимое файла должно выглядеть следующим образом.

Используя текстовый редактор, удалите знак ‘ из первой строки под текстом Property Get NewEnum() As IUnknown в файле. Сохраните измененный файл.

В редакторе VBE удалите класс, созданный из проекта VBA, и не экспортируйте его при появлении соответствующего запроса. cc3

Читайте так же:
Счетчик пройденного пешеходом пути

Импортируйте файл, из которого вы удалили знак ‘ , назад в VBE. cc4

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

СноскиОписание
[cc1]Вы можете создать модуль класса, выбрав Class Module (Модуль класса) в меню Insert (Вставка). Вы можете переименовать модуль класса, изменив его свойства в окне Properties (Свойства).
[cc2]Вы можете активировать диалоговое окно Экспорт файла, выбрав Export File (Экспорт файла) в меню File (Файл).
[cc3]Вы можете удалить модуль класса из VBE, выбрав Remove Item (Удалить элемент) в меню File (Файл).
[cc4]Вы можете импортировать файл внешнего модуля класса, запустив диалоговое окно Импорт файла (выберите Import File (Импорт файла) в меню File (Файл)).

См. также

  • Темы по основам Visual Basic

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Циклы VBA (ч.1). Команды организации циклов

Какие либо действия процедуры повторяющиеся заданное количество раз или пока выполняется или не выполняется некоторое условие называют циклом.

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

Структуры цикла, всегда выполняющиеся заданное количество раз, называются циклами с фиксированным числом итераций. Другие типы структур цикла повторяются переменное количество раз в зависимости от некоторого набора условий. Такие циклы называются неопределенными циклами.

Блок операторов, находящийся между началом и концом цикла называется «тело цикла».

Самой простой структурой цикла является фиксированный цикл.

Цикл For..Next

For counter = Start To End [Step StepSize]
Statements
Next [counter]

Counter — любая численная переменная VBA
Start — любое численное выражение , определяет начальное значение для переменной counter
End — численное выражение, определяет конечное значение для переменной counter
Statements — один, несколько или ни одного оператора VBA (тело цикла).

По умолчанию VBA увеличивает переменную counter на 1 каждый раз при выполнении операторов в цикле. Можно задать другое значение (SterSize — любое численное выражение), на которое будет изменяться counter.

Ключевое слово Next сообщает VBA о том, что достигнут конец цикла. Необязательная переменная counter после ключевого слова Next должна быть той же самой переменной counter, которая была задана после ключевого слова For в начале структуры цикла.

Ниже представлен листинг простейшего цикла For..Next, который считает сумму цифр от 1 до 10:

А теперь два варианта цикла For..Next с использованием шага цикла отличного от единицы:

Обратите внимание! При уменьшении счетчика цикла For..Next цикл выполняется, пока переменная счетчика больше или равна конечному значению, а когда счетчик цикла увеличивается, цикл выполняется, пока переменная счетчика меньше или равна конечному значению.

Цикл For Each..Next

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

For Each Element In Group
Statements
Next [Element]

Element — переменная, используемая для итерации по всем элементам в определенной группе
Group — это объект коллекции или массив
Statements — один, несколько или ни одного оператора VBA (тело цикла).

Цикл For Each..Next всегда выполняется столько раз, сколько имеется элементов в определенной группе.

В нижеприведенном листинге показана функция SheetExists, использующая цикл For Each..Next для определения того, существует ли определенный лист в рабочей книге Excel:

В начало страницы

В начало страницы

Циклы со счетчиком vba

Циклы в Visual Basic бывают трех типов:

    For . Next
    For Each . Next
    Do . Loop

Конструкция For. Next выполняет последовательность команд определенное число раз. Такую конструкцию называют циклом, а выполняемые ею программные коды — телом цикла.

For Счетчик = НачальноеЗначение То КонечноеЗначение [Step ЗначениеШага]
конструкции
Next [счетчик]

Параметры конструкции:

  • Счетчик — определяет имя переменной, которая будет «считать» количество выполнений цикла.
  • НачальноеЗначение указывает числовое значение, которое присваивается переменной-счетчику при первом проходе цикла.
  • КонечноеЗначение , указанное после ключевого слова To. Цикл выполняется до тех пор, пока значение счетчика не превысит КонечноеЗначение параментра цикла.
  • ЗначениеШага, указанное за ключевым словом Step. После каждого прохода цикла значение Счетчика изменяется на величину ЗначенияШага. ЗначениеШага можно не указывать, если его значение равно единице.
  • Next – ключевое слово, обозначающее конец тела цикла. Ключевое слово Next является обязательным. За ключевым словом Next может быть указан Счетчик цикла (его имя).

Конструкция Each . Next используется для обработки всех элементов некоторого набора объектов, например массива. Ее удобно использовать в том случае, когда количество обрабатываемых элементов не известно.

    For Each Элемент In группа
    конструкции
    Next элемент

При использовании конструкции For Each . Next необходимо иметь в виду, что для набора объектов параметр Элемент может быть только переменной типа Variant , общей переменной типа Object или объектом, перечисленным в Object Browser. Для массивов параметр Элемент может быть только переменной типа Variant.

Конструкция Do. Loop с ключевым словом While выполняется до тех пор, пока задаваемое в цикле условие истинно.

    Do While Условие
    Конструкции
    Loop

и
Do
Конструкции
Loop While Условие

Аргумент конструкции Условие является логическим выражением, значение которого проверяется перед каждым проходом цикла. Если это значение равно True , то выполняется последовательность команд, которые расположены между Do while и ключевым словом Loop . Эти конструкции образуют тело цикла. Если при очередном проходе цикла условие равно False , то происходит выход из цикла и управление передается конструкции, следующей за Loop.

Конструкция Do . Loop с ключевым словом Until выполняется до тех пор, пока задаваемое в цикле условие ложно.

    Do Until Условие
    Конструкции
    Loop

и
Do
Конструкции
Loop Until Условие

В циклах может быть использован оператор Exit . В некоторых случаях необходимо прервать выполнение цикла до его завершения. Это можно сделать с помощью команды безусловного перехода Exit. Команда Exit завершает выполнение цикла и передает управление следующей за циклом конструкции.

Синтаксис этого оператора внутри цикла For выглядит так: Exit For . Внутри цикла Do синтаксис оператора Exit Do.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector