Методы передачи дискретных данных на физическом уровне. Лекции Компьюторные сети. Физический уровень. Связь в микроволновом диапазоне

Алгоритм цикла For….Next приведен на рис. 5.28.

Counter – любая численная переменная VBA, обычно переменная типа Integer или Long.

Start - любое численное выражение и определяет начальное значение для переменной Counter.

End – численное выражение, определяющее конечное значение для переменной Counter .

Statements – один, несколько или ни одного оператора. Эти операторы выполняют тело цикла. VBA выполняет каждый из этих операторов при каждом выполнении цикла.

Ключевое слово Next

Counter=counter+StepSise

Рис.9.28. Алгоритм цикла For….Next

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

Синтаксис :

For counter = Start To End

При выполнении цикла For Next VBA поступает следующим образом:

Присваивает значение, представленное Star , переменной С ounter .

Выполняет все операторы, представленные с помощью Statements , пока не достигнет ключевого слова Next . Ключевое слово Next показывает VBA на то, что достигнут конец тела цикла.

Изменяет переменную С ounter на величину StepSize (если включается необязательное слово Step) Если Step не определено, то VBA увеличивает переменную counter на 1.

Возвращается к началу цикла и сравнивает текущее значение переменной С ounter со значением, представленным End. Если значение С ounter меньше значения End , VBA продолжает выполнение с первого оператора после ключевого слова Next .

9.2.4. Ввод-вывод одномерных и двухмерных массивов

Массив (array ) – это коллекция переменных, которые имеют общее имя и базовый тип. Массив является удобным способом хранения нескольких связанных элементов данных в едином контейнере для большего удобства и эффективности программирования. Все элементы данных, сохраняемых в массиве, должны иметь один и тот же тип.

Массив позволяет сохранять и манипулировать многими элементами данных посредством единственной переменной. Кроме уменьшения общего числа различных имен переменных, которые необходимо отслеживать, другим основным преимуществом использования массивов является то, что можно использовать циклы для легкой обработки различных элементов массивов. Объединяя массивы и структуры цикла (обычно For….Next) можно написать небольшое число операторов, которые обрабатывают большой объем данных. Выполнение тех же задач с использованием отдельных переменных может потребовать написания сотен операторов.

Размерность массива

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

Одномерные массивы

Пример одномерного массива приведен в таблице № 9.9.

Таблица № 9.9

В программировании обычно используется нумерация с нулевой базой.

Для доступа к данным, хранящимся в определенном элементе массива, следует указывать имя массива с последующим числом, называемым индексом элемента. Индекс заключают в круглые скобки. Например, если массив в таблице № 1.1 имеет имя DoubleArray, то следующий оператор присваивает число 45 переменной DoubleAny.

DoubleAny = DoubleArray (3)

В этом операторе число 3 является индексом массива. Поскольку нумерация элементов начинается с нуля, элемент, на который ссылается оператор, является, фактически, четвертым элементом массива DoubleArray.

При выполнении оператора DoubleArray, VBA выбирает значение 45 и сохраняет это значение в переменной DoubleArray.

Этот же оператор можно использовать при сохранении данных в массиве:

DoubleArray (5)=12.

При выполнении этого оператора VBA помещает значение 12 в указанных элемент массива, заменяя предыдущее содержимое этого элемента.

Одномерные массивы обычно используются для представления различных списков данных.

Многомерные массивы

Когда необходимо представить таблицы данных с организацией данных в формате строк и столбцов, для этого используют многомерные массивы.

В двумерном массиве адрес каждой ячейки состоит из двух чисел: номер строки (первый индекс) и номер столбца (второй индекс). В VBA можно создавать массивы до 60 измерений.

Если в массиве число элементов не меняется, то такой массив называется статическим.

Статические и динамические массивы

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

VBA сохраняет зарезервированной область памяти для всех элементов в массиве, пока существует переменная типа массива. Подобные массивы называются статическими (static), потому что число элементов в массиве не меняется.

Оператор Option Base

Обычно в VBA используются массивы с нулевой базой. Оператор Option Base позволяет задавать 0 или 1 как начальное число по умолчанию для индексов массива. Если оператор Option Base не используется, VBA начинает нумерацию индексов с 0 (по умолчанию). Необходимо помещать оператор Option Base в область объявлений модуля перед объявлением любых переменных, констант или процедур. Нельзя помещать оператор Option Base внутри процедуры. Можно иметь только один оператор Option Base в модуле.

Синтаксис:

Option Base 0|1

Объявление массивов

Объявление массива с помощью оператора Dim имеет следующий синтаксис.

Синтаксис:

Dim VarName ()

Dim VarName ( upper, upper]….) [ As type ],

VarName – любое имя для массива, удовлетворяющее VBA-правилам для имен идентификаторам.

Subscripts – измерение массива.

As Type – тип данных.

Lower – нижняя граница значения индекса.

Upper – верхняя граница значения индекса.

Type – тип данных

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

Dim str_array (1 To 100) As String

Dim variant_array ()

Dim str_Multiplication (0 To 15, 0 To 15) As String

Использование массивов

Для доступа к элементу массива необходимо указать имя массива, за которым следует значение индекса, заключенное в круглые скобки.

Обращение к элементу массива имеет следующий синтаксис.

Синтаксис.

arrayName (validIndex1, ….)

validIndex – имя массива.

validIndex1 – допустимое значение индекса для первого измерения массива.

validIndex2 – допустимое значение индекса для второго измерения массива.

Необходимо предоставлять значение индекса для каждого измерения массива при каждом обращении к какому-либо элементу массива.

Ввод-вывод одномерных массивов

При вводе одномерного массива необходимо последовательно вводить 1-й, 2-й и т.д. элементы массива, аналогично поступают при выводе. Для ввода или вывода массива необходимо организовать цикл. Наиболее удобно использовать для ввода и вывода одномерного массива алгоритм с использованием безусловного цикла.

Алгоритм ввода вывода одномерного массива приведен на рис.5.29.

Расшифровка процедуры приведена ниже.

Sub Massiv () – название процедуры.

Dim Mas (5) As Integer - объявили одномерный массив с 5-ю элементами, тип чисел – целые.

Dim s As String – объявили рабочую переменную для завершающего вывода данных из массива в диалогом окне. As String – тип данных в переменной для хранения.

For i = 1 To 5 – процедура в первом цикле For….Next, принимает целые числа от 1 до 5 и заносит их в массив.

Mas (i) = InputBox (i) – ввод целого числа для i-го элемента.

Next – переход ко второму циклу (элементы массива заносятся в строку и выводятся на экран в диалоговом окне с помощью оператора MsgBox).

For i = 1 To 5 – элементы в строке с 1 по 5.

s = s & Mas(i) & “ ;” - формирование строки из элементов массива. Массив выводится в одну строку. Элементы массива разделяются символом “ ;”.

MsgBox s – вывод ранее введенного массива.

Рис.5.27. Алгоритм ввода-вывода одномерного

Рис. 9.29. Алгоритм и процедура ввода-вывода одномерного массива

Ввод-вывод двухмерного массива

Алгоритм и процедура ввода и вывода двухмерного массива представлен на рис.5.30.

Описание данной процедуры:

Sub Massiv () – название процедуры

Объявление переменных, которые используются в данной процедуре:

Dim Mas (5, 5) As Integer - объявили двухмерный массив с 5 столбцами и пятью строками, тип чисел – целые.

Dim s As String – объявили рабочую переменную для завершающего вывода данных из массива в диалогом окне. As String – тип данных в переменной для хранения

Next i – окончание операции присвоения переменных

Ввод элементов массива в память компьютера:

For i = 1 To 5 – ввод осуществляется с первого элемента первой строки, потом со второго и т.д.

For j = 1 To 5 до конца первой строки, потом с первого элемента второй строки и т.д.

Mas(i,j) = InputBox(i,j) – оператор ввода элементов массива в память ЭВМ

Рис. 9.30. Алгоритм и процедура ввода-вывода двухмерного массива

Алгоритмы упорядочения массива

В качестве примера приведем алгоритм и процедуру сортировки одномерного массива методом «пузырька»

Вывод элементов введенного массива из памяти ЭВМ:

For i = 1 To 5 – вывод осуществляется аналогично вводу

s = s & Mas (i,j) & “ ; ”

s = s & Chr (13) – перевод строки (вывод не одной строкой, а несколькими, как в введенном массиве)

Next i – окончание действия оператора For….Next

MsgBox s – вывод ранее введенного массива на диалоговое окно

End Sub – окончание процедуры.

Циклы позволяют выполнить одну или несколько строк кода несколько раз. VBA поддерживает следующие циклы:

For...Next For Each...Next Do... Loop

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

For counter = start To end операторы Next

Параметры counter (счетчик), start (начало цикла), end (конец цикла) и increment (приращение) являются числовыми.

Примечание. Параметр increment может быть как положительным, так и отрицательным. Если он положителен, параметр start должен быть меньше или равен параметру end, иначе цикл не будет выполняться. Если параметр increment отрицателен, то параметр start должен быть больше или равен значению параметра end, чтобы выполнялось тело цикла. Если параметр Step не задан, то значение параметра increment по умолчанию равно 1.

VBA выполняет цикл For в следующей последовательности:

1. Устанавливает значение переменной цикла counter в значение start.

2. Сравнивает значение переменной цикла counter и значение параметра end. Если переменная counter больше, VBA завершает выполнение цикла. (Если значение параметра increment отрицательно, то VBA прекращает выполнение цикла при условии, что значение переменной цикла counter меньше значения параметра end.)

3. Выполняет операторы тела цикла statements.

4. Увеличивает значение переменной цикла counter на 1 или на величину значения параметра increment, если он задан.

5. Повторяет шаги со 2 по 4.

Рассмотрим пример: Вычислить значение функции f(t)

при заданных a, b, n, если t изменяется от a до b с шагом Dt=(b-a)/(n-1).

Sub пример3() Dim f() As Single Dim a As Single, b As Single, t As Single, dt As Single Dim i As Integer, n As Integer Call read("a1", a) : Call read("b1", b) : Call read("c1", n) ReDim f(1 To n - 1) dt = (b - a) / (n - 1) : t = a Call out("a2", "i") : Call out("b2", "t") : Call out("c2", "f(t)") For i = 1 To n - 1 t = t + dt If t <= -1 Then f(i) = -1 ElseIf t > 1 Then f(i) = 1 Else f(i) = t End If Call out("a" & (2 + i), i) : Call out("b" & (2 + i), t) : Call out("c" & (2 + i), f(i)) Next i End Sub

Конструкция For Each . . . Next

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

Синтаксис конструкции цикла For Each . . . Next таков:

For Each element In group операторы Next element

Следует помнить следующие ограничения при использовании цикла For Each . . . Next:

Для наборов параметр element может быть только переменной типа variant, общей переменной типа object или объектом, перечисленным в Object Browser

Для массивов параметр element может быть только переменной типа Variant

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

Конструкция Do...Loop

Цикл Do применяется для выполнения блока операторов неограниченное число раз. Существует несколько разновидностей конструкции Do . . . Loop, но каждая из них вычисляет выражение-условие, чтобы определить момент выхода из цикла. Как и в случае конструкции If . . . Then условие должно быть величиной или выражением, принимающими значение False (нуль) или True (не нуль).

В следующей конструкции Do . . . Loop операторы выполняются до тех пор, пока значением условия является True (Истина):

Do While условие операторы Loop

Выполняя этот цикл, VBA сначала проверяет условие. Если условие ложно (False), он пропускает все операторы цикла. Если оно истинно (True), VBA выполняет операторы цикла, снова возвращается к оператору Do While и снова проверяет условие.

Следовательно, цикл, представленный данной конструкцией, может выполняться любое число раз, пока значением условия является не нуль или True (Истина). Отметим, что операторы тела цикла не выполняются ни разу, если при первой проверке условия оно оказывается ложным (False).

Рассмотрим пример: Вычислить сумму ряда

с заданной точностью.

Sub пример4() Dim e As Single, x As Single, s As Single Dim m As Single, p As Single, i As Single Call read("a1", x) : Call read("b1", e) s = 0: i = 1: m = 1: p = -1 Call out("a2", "i") : Call out("b2", "m") : Call out("c2", "s") Do While Abs(m) >= e p = -p * x m = p / i s = s + m Call out("a" & (2 + i), i) : Call out("b" & (2 + i), Abs(m)) : Call out("c" & (2 + i), s) i = i + 1 Loop End Sub

Другая разновидность конструкции Do . . . Loop сначала выполняет операторы тела цикла, а затем проверяет условие после каждого выполнения. Эта разновидность гарантирует, что операторы тела цикла выполнятся по крайней мере один раз:

Do операторы Loop While условие

Две другие разновидности конструкции цикла аналогичны предыдущим, за исключением того, что цикл выполняется, пока условие ложно (False):

Цикл не выполняется вообще или выполняется много раз:

Do Until условие

операторы Loop

Цикл выполняется по крайней мере один раз:

операторы

Loop Until условие

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

Можно помещать структуры управления внутрь других структур управления (например, блок 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 [блок операторов] [блок операторов] Next Do [(While | Until} условие] [блок операторов] [блок операторов] Loop

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

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

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

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

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

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

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

Инструкция цикла представляет собой указание, из которого ясно, какой набор инструкций (этот набор инструкций называется телом цикла) нужно выполнять многократно и каково правило окончания выполнения цикла.

7.2.1. Параметрический цикл For… Next

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

Синтаксис цикла: For ИПЦ=НЗПЦTo КЗПЦ[Step ШИПЦ] Тело цикла (одна или несколько инструкций) Next [ИПЦ]

Слова For (для), To (до), Step (шаг), Next (затем) являются зарезервированными.

Применены обозначения:

ИПЦ – имя параметра цикла (переменная любого числового типа);

НЗПЦ – начальное значение параметра цикла (выражение любого числового типа), которое параметр цикла будет иметь при первом выполнении тела цикла;

КЗПЦ – конечное значение параметра цикла (выражение любого числового типа), с которым сравнивается текущее значение параметра цикла;

ШИПЦ – шаг изменения параметра цикла (выражение любого числового типа) – необязательная часть инструкции цикла.

Числовые значенияНЗПЦ и КЗПЦ задают интервал, в котором будет изменяться параметр цикла. Необязательный параметр ШИПЦ задает шаг изменения счетчика цикла на каждом проходе. По умолчанию, если он отсут–ствует, то принимается равным 1. Наконец, после инструкций, составляющих тело цикла, следует команда, обозначающая границу действия цикла. В случае вложенных циклов (в тело цикла входит инструкция цикла) полезно указывать, к какому из них относится команда Next . Это достигается добавлением после слова Next имени параметра цикла.

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

Рассмотрим примеры.

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

Dim I As Integer, Сумма As Integer

For i = 1 To 100 Step 2

Сумма = Сумма +i

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

Dim N As Integer

For N = 100 To 60 Step –10

Этот код выведет на текущей форме:

Следующая инструкция заставляет компьютер подавать звуковой сигнал 50 раз. Инструкция For определяет, что параметром цикла является переменная x , ее начальное и конечное значения. Команда Next изменяет счетчик с шагом.

Dim x As Integer

Инструкцию For...Next можно завершить досрочно с помощью инструкции Exit For. Выполнение этой инструкции приводит к немедленному выходу из цикла.

7.2.2. Инструкция цикла Do While...Loop или Do...Loop While

Здесь While (пока) и Loop (цикл) зарезервированные слова. Циклы типа While предназначены для ситуаций, когда количество повторений тела цикла (итераций) заранее не известно. Вот синтаксис двух разновидностей цикла While :

Do While УсловиеПовторения Группа инструкций Loop

Do Группа инструкций Loop While УсловиеПовторения

Различие между ними заключается в том, что УсловиеПовторения (условие повторения выполнения тела цикла) проверяется в первом случае до выполнения тела цикла (цикл – пока), а во втором случае – после выполнения тела цикла (цикл – до).

Перейдем к примерам.

Рассмотрим действие следующего участка программы.

Счетчик = 0

Do While Номер > 10

Номер = Номер - 1

Счетчик = Счетчик + 1

MsgBox ("Выполнено " & Счетчик & ­_

" итераций цикла.")

При выполнении этого участка программы в окне функции MsgBox будет выведено:

Выполнено 10 итераций цикла.

В этой программе условие проверяется до входа в цикл. Если переменной Номер задать значение, равное 9 вместо 20, инструкции внутри цикла выполняться не будут.

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

Счетчик = 0

Номер = Номер - 1

Счетчик = Счетчик + 1

Loop While Номер > 10

MsgBox ("В цикле выполнено " & Счетчик & _

" итераций.")

Инструкцию Do...Loop можно завершить досрочно с помощью инструкции Exit Do .

Цикл For... Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For... Next.

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

Синтаксис цикла For... Next

For counter = start To end [ Step step ] [ statements ] [ Exit For ] [ statements ] Next [ counter ] For счетчик = начало To конец [ Step шаг ] [ операторы ] [ Exit For ] [ операторы ] Next [ счетчик ]

В квадратных скобках указаны необязательные атрибуты цикла For... Next.

Компоненты цикла For... Next

Компонент Описание
counter Обязательный атрибут. Числовая переменная, выполняющая роль счетчика, которую еще называют управляющей переменной цикла.
start Обязательный атрибут. Числовое выражение, задающее начальное значение счетчика.
end Обязательный атрибут. Числовое выражение, задающее конечное значение счетчика.
Step* Необязательный атрибут. Оператор, указывающий, что будет задан шаг цикла.
step Необязательный атрибут. Числовое выражение, задающее шаг цикла. Может быть как положительным, так и отрицательным.
statements Необязательный** атрибут. Операторы вашего кода.
Exit For Необязательный атрибут. Оператор выхода из цикла до его окончания.
Next [ counter ] Здесь counter - необязательный атрибут. Это то же самое имя управляющей переменной цикла, которое можно здесь не указывать.

*Если атрибут Step отсутствует, цикл For... Next выполняется с шагом по умолчанию, равному 1 .

**Если не использовать в цикле свой код, смысл применения цикла теряется.

Примеры циклов For... Next

Вы можете скопировать примеры циклов в свой модуль VBA, последовательно запускать их на выполнение и смотреть результаты.

Простейший цикл

Заполняем десять первых ячеек первого столбца активного листа Excel цифрами от 1 до 10:

Sub test1() Dim i As Long For i = 1 To 10 Cells(i, 1) = i Next End Sub

Простейший цикл с шагом

В предыдущий цикл добавлен оператор Step со значением 3, а результаты записываем во второй столбец:

Sub test2() Dim i As Long For i = 1 To 10 Step 3 Cells(i, 2) = i Next End Sub

Цикл с отрицательными аргументами

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

Sub test3() Dim i As Long For i = 0 To -9 Step -1 Cells(i + 10, 3) = i + 10 Next End Sub

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

Sub test4() Dim i As Long For i = 0 To -9 Step -3 Cells(i + 10, 4) = i + 10 Next End Sub

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

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

Sub test5() Dim i1 As Long, i2 As Long For i1 = 1 To 10 "Пятой ячейке в строке i1 присваиваем 0 Cells(i1, 5) = 0 For i2 = 1 To 4 Cells(i1, 5) = Cells(i1, 5) + Cells(i1, i2) Next Next End Sub

Выход из цикла

В шестой столбец активного листа запишем названия десяти животных, конечно же, с помощью цикла For... Next:

Sub test6() Dim i As Long For i = 1 To 10 Cells(i, 6) = Choose(i, "Медведь", "Слон", "Жираф", "Антилопа", _ "Крокодил", "Зебра", "Тигр", "Ящерица", "Лев", "Бегемот") Next End Sub

Следующий цикл будет искать в шестом столбце крокодила, который съел галоши. В ячейку седьмого столбца цикл, пока не встретит крокодила, будет записывать строку «Здесь был цикл», а когда обнаружит крокодила, запишет «Он съел галоши» и прекратит работу, выполнив команду Exit For. Это будет видно по ячейкам рядом с названиями животных ниже крокодила, в которых не будет текста «Здесь был цикл».

Sub test7() Dim i As Long For i = 1 To 10 If Cells(i, 6) = "Крокодил" Then Cells(i, 7) = "Он съел галоши" Exit For Else Cells(i, 7) = "Здесь был цикл" End If Next End Sub

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

Цикл с дробными аргументами

Атрибуты start, end и step могут быть представлены числом, переменной или числовым выражением:

For i = 1 To 20 Step 2 For i = a To b Step c For i = a - 3 To 2b + 1 Step c/2

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

"Значения атрибутов до округления For i = 1.5 To 10.5 Step 2.51 "Округленные значения атрибутов For i = 2 To 10 Step 3

Старайтесь не допускать попадания в тело цикла For... Next неокругленных значений аргументов, чтобы не получить непредсказуемые результаты его выполнения. Если без дробных чисел не обойтись, а необходимо использовать обычное округление, применяйте в коде VBA функцию рабочего листа WorksheetFunction.Round для округления числа перед использованием его в цикле For... Next.

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

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

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

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

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

Цикл For..Next

Синтаксис

For counter = Start To End
Statements
Next [counter ]

Counter - любая численная переменная VBA
Start - любое численное выражение, определяет начальное значение для переменной counter
End - численное выражение, определяет конечное значение для переменной counter


По умолчанию 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 (тело цикла).