Цикл с параметром for basic

Цикл с параметром for basic thumbnail
  • 07/20/2015
  • Чтение занимает 4 мин

В этой статье

Повторяет группу инструкций указанное число раз.

Синтаксис

For counter [ As datatype ] = start To end [ Step step ] [ ements ] [ Continue For ] [ ements ] [ Exit For ] [ ements ] Next [ counter ]

Компоненты

ОтделениеОписание
counterТребуется в For инструкции. Числовая переменная. Управляющая переменная для цикла. Дополнительные сведения см. в подразделе аргумент Counter далее в этой статье.
datatypeНеобязательный элемент. Тип данных counter . Дополнительные сведения см. в подразделе аргумент Counter далее в этой статье.
startОбязательный. Числовое выражение. Начальное значение counter.
endОбязательный. Числовое выражение. Конечное значение counter .
stepНеобязательный элемент. Числовое выражение. Величина, на которую counter увеличивается каждый раз с помощью цикла.
ementsНеобязательный элемент. Одна или несколько инструкций между For и Next выполняются указанное число раз.
Continue ForНеобязательный элемент. Передает управление в следующую итерацию цикла.
Exit ForНеобязательный элемент. Передает управление за пределы For цикла.
NextОбязательный элемент. Завершает определение For цикла.

Примечание

ToКлючевое слово используется в этом операторе для указания диапазона счетчика. Это ключевое слово также можно использовать в SELECT… Оператор Case и в объявлениях массивов. Дополнительные сведения об объявлениях массивов см. в разделе оператор Dim.

Простые примеры

Используйте For структуру…, Next Если нужно повторить набор инструкций заданное число раз.

В следующем примере index переменная начинается со значения 1 и увеличивается при каждой итерации цикла, после чего значение index достигает 5.

For index As Integer = 1 To 5 Debug.Write(index.ToString & ” “) Next Debug.WriteLine(“”) ‘ Output: 1 2 3 4 5

В следующем примере number переменная начинается с 2 и уменьшается на 0,25 в каждой итерации цикла, после чего значение number достигнет 0. StepАргумент класса -.25 сокращает значение на 0,25 при каждой итерации цикла.

For number As Double = 2 To 0 Step -0.25 Debug.Write(number.ToString & ” “) Next Debug.WriteLine(“”) ‘ Output: 2 1.75 1.5 1.25 1 0.75 0.5 0.25 0

Совет

Ответ … Конец оператора while или Do… Оператор Loop хорошо работает, если заранее неизвестно, сколько раз нужно выполнять инструкции в цикле. Однако, если вы планируете выполнять цикл определенное число раз, For Next лучше выбрать цикл…. Число итераций определяется при первом входе в цикл.

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

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

For indexA = 1 To 3 ‘ Create a new StringBuilder, which is used ‘ to efficiently build strings. Dim sb As New System.Text.StringBuilder() ‘ Append to the StringBuilder every third number ‘ from 20 to 1 descending. For indexB = 20 To 1 Step -3 sb.Append(indexB.ToString) sb.Append(” “) Next indexB ‘ Display the line. Debug.WriteLine(sb.ToString) Next indexA ‘ Output: ‘ 20 17 14 11 8 5 2 ‘ 20 17 14 11 8 5 2 ‘ 20 17 14 11 8 5 2

При вложенных циклах каждый цикл должен иметь уникальную counter переменную.

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

Выход и продолжение для

Exit ForОператор немедленно завершает работу For …Next выполняет цикл и передает управление оператору, который следует за Next оператором.

Continue ForОператор передает управление сразу в следующую итерацию цикла. Дополнительные сведения см. в разделе оператор continue.

В следующем примере показано использование Continue For Exit For операторов и.

For index As Integer = 1 To 100000 ‘ If index is between 5 and 7, continue ‘ with the next iteration. If index >= 5 AndAlso index <= 8 Then Continue For End If ‘ Display the index. Debug.Write(index.ToString & ” “) ‘ If index is 10, exit the loop. If index = 10 Then Exit For End If Next Debug.WriteLine(“”) ‘ Output: 1 2 3 4 9 10

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

Exit For часто используется после вычисления некоторого условия (например, в If … Then …Else структура). Может потребоваться использовать Exit For для следующих условий:

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

  • А.. Try . Catch …Finally перехватывает исключение. Exit ForВ конце блока можно использовать Finally .

  • У вас есть бесконечный цикл, который может выполняться с большим или даже бесконечным числом раз. При обнаружении такого условия можно использовать Exit For для экранирования цикла. Дополнительные сведения см. в разделе Do… Loop, инструкция.

Техническая реализация

При For запуске цикла… Next Visual Basic вычисляет start , end и step . Visual Basic вычисляет эти значения только в данный момент, а затем присваивает значение start counter . Перед выполнением блока операторов Visual Basic сравнивается counter с end . Если counter уже больше end значения (или меньше step , если имеет отрицательное значение), For цикл завершается, и управление передается оператору, следующему за Next оператором. В противном случае выполняется блок операторов.

Читайте также:  Кровотечение середине цикла беременность

Каждый раз, когда Visual Basic обнаруживает Next оператор, он увеличивается на counter step и возвращается в For оператор. Затем он сравнивает counter с end и снова либо выполняет блок, либо выходит из цикла, в зависимости от результата. Этот процесс выполняется до тех пор counter , пока не будет пройден end или Exit For не встретится оператор.

Цикл не останавливается, пока не будет counter пройден end . Если counter равно end , цикл продолжится. Сравнение, которое определяет, следует ли запускать блок, counter <= end Если step является положительным и counter >= end step отрицательным.

Если изменить значение counter во время цикла, код может оказаться труднее для чтения и отладки. Изменение значения start , end или step не влияет на значения итерации, которые были определены при первом входе в цикл.

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

Аргумент Step

Значение step может быть либо положительным, либо отрицательным. Этот параметр определяет обработку цикла в соответствии со следующей таблицей.

Значение шагаЦикл выполняется, если
Положительный или нулевойcounter <= end
Отрицательное числоcounter >= end

Значение step по умолчанию – 1.

Аргумент счетчика

В следующей таблице показано counter , определяет ли новая локальная переменная, областью действия которой является весь For…Next цикл. Это определение зависит от того, существует ли оно datatype и counter уже определено ли оно.

datatypeИмеется?counterУже определено?Результат ( counter определяет, определена ли новая локальная переменная в пределах всего For…Next цикла)
НетДаНет, так как counter уже определено. Если область действия counter не является локальной для процедуры, возникает предупреждение во время компиляции.
НетНетДа. Тип данных выводится из start end выражений, и step . Дополнительные сведения о выводе типа см. в разделе Option Infer и определение локального типа.
ДаДаДа, но только в том случае, если существующая counter переменная определена за пределами процедуры. Эта переменная остается отдельной. Если область существующей counter переменной является локальной для процедуры, возникает ошибка времени компиляции.
ДаНетДа.

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

  • A Byte , SByte , UShort , Short , UInteger , Integer , ULong , Long , Decimal , или Double .

  • Перечисление, объявляемое с помощью инструкции enum.

  • Объект Object.

  • Тип T , имеющий следующие операторы, где B – это тип, который можно использовать в Boolean выражении.

    Public d Operator >= (op1 As T, op2 As T) As B

    Public d Operator <= (op1 As T, op2 As T) As B

    Public d Operator – (op1 As T, op2 As T) As T

    Public d Operator + (op1 As T, op2 As T) As T

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

startВыражения, end и step могут иметь любой тип данных, который расширяется до типа counter . При использовании определяемого пользователем типа для может потребоваться counter определить CType оператор преобразования для преобразования типов start , end или step в тип counter .

Пример

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

Dim lst As New List(Of Integer) From {10, 20, 30, 40} For index As Integer = lst.Count – 1 To 0 Step -1 lst.RemoveAt(index) Next Debug.WriteLine(lst.Count.ToString) ‘ Output: 0

Пример

В следующем примере перебирается перечисление, объявленное с помощью инструкции enum.

Public Enum Mammals Buffalo Gazelle Mongoose Rhinoceros Whale End Enum Public Sub ListSomeMammals() For mammal As Mammals = Mammals.Gazelle To Mammals.Rhinoceros Debug.Write(mammal.ToString & ” “) Next Debug.WriteLine(“”) ‘ Output: Gazelle Mongoose Rhinoceros End Sub

Пример

В следующем примере параметры инструкции используют класс, который содержит перегрузки операторов для + операторов,, – >= и <= .

Private Class Distance Public Property Number() As Double Public Sub New(ByVal number As Double) Me.Number = number End Sub ‘ Define operator overloads to support For…Next ements. Public d Operator +(ByVal op1 As Distance, ByVal op2 As Distance) As Distance Return New Distance(op1.Number + op2.Number) End Operator Public d Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance Return New Distance(op1.Number – op2.Number) End Operator Public d Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean Return (op1.Number >= op2.Number) End Operator Public d Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean Return (op1.Number <= op2.Number) End Operator End Class Public Sub ListDistances() Dim distFrom As New Distance(10) Dim distTo As New Distance(25) Dim distStep As New Distance(4) For dist As Distance = distFrom To distTo Step distStep Debug.Write(dist.Number.ToString & ” “) Next Debug.WriteLine(“”) ‘ Output: 10 14 18 22 End Sub

Читайте также:  Менструационный цикл болят ноги

См. также

  • List<T>
  • Циклические структуры
  • Оператор While…End While
  • Оператор Do…Loop
  • Вложенные структуры управления
  • Оператор Exit
  • Коллекции

Источник

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

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

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

For counter = start To end [ Step step ]

[ ements ]

[ Exit For ]

[ ements ]

Next [ counter ]

For счетчик = начало To конец [ Step шаг ]

[ операторы ]

[ Exit For ]

[ операторы ]

Next [ счетчик ]

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

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

КомпонентОписание
counterОбязательный атрибут. Числовая переменная, выполняющая роль счетчика, которую еще называют управляющей переменной цикла.
startОбязательный атрибут. Числовое выражение, задающее начальное значение счетчика.
endОбязательный атрибут. Числовое выражение, задающее конечное значение счетчика.
Step*Необязательный атрибут. Оператор, указывающий, что будет задан шаг цикла.
stepНеобязательный атрибут. Числовое выражение, задающее шаг цикла. Может быть как положительным, так и отрицательным.
ementsНеобязательный** атрибут. Операторы вашего кода.
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

Результат работы циклов For… Next из примеров:

Результат работы циклов For... Next из примеров

Результат работы циклов For… Next

Такие данные на активном листе 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 функцию рабочего листа Worksheet.Round для округления числа перед использованием его в цикле For… Next.

Источник

Циклы

Последнее обновление: 30.10.2015

Еще одним видом управляющих конструкций являются циклы. В VB.NET используется несколько видов циклов.

  • For…Next

  • For Each…Next

  • While

  • Do

Цикл For…Next

В этом цикл выполняется определенное число раз, причем это число задается счетчиком:

For i As Integer = 1 To 9 Console.WriteLine(“Квадрат числа {0} равен {1}”, i, i * i) Next

Здесь переменная i выполняет роль счетчика. После слова To мы помещаем максимальное значение счетчика. При каждом цикле значение счетчика увеличивается на единицу. И это значение сравнивается со значением после To. Если эти два значения равны, то цикла прекращает свою работу.

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

For i As Integer = 1 To -9 Step -1 For j As Integer = 1 To 9 Console.WriteLine(“Произведение чисел i и j равно {0}”, i * j) j += 1 Next Next

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

Цикл For Each…Next

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

‘Создаем массив из пяти чисел Dim nums(4) As Integer Dim r As New Random() ‘инициализируем массив For i As Integer = 0 To nums.Length – 1 nums(i) = r.Next(100) Next ‘Выводим элементы массива For Each i As Integer In nums Console.Write(“{0} “, i) Next

В выражении For Each мы сначала указываем переменную, которая будет принимать значения элементов массива. А после ключевого слова In указываем группу, в которой надо перебрать все элементы.

Цикл While

В цикл While выполняется до тех пор, пока соблюдается определенное условие, указанное после слова While:

Dim j As Integer = 10 While j > 0 Console.WriteLine(j) j -= 1 End While

Цикл Do

Цикл Do, также как и цикл While, выполняется, пока соблюдается определенное условие. Однако он имеет разные формы. Так, в следующем примере сначала проверяется условие, а затем выполняется блок кода, определенный в цикле:

Dim j As Integer = 10 Do While j > 0 Console.WriteLine(j) j -= 1 Loop

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

Dim j As Integer = 10 Do Until j < 0 Console.WriteLine(j) j -= 1 Loop

Если изначально условие, заданное в цикле, неверно, то цикл не будет работать. Но мы можем определить проверку в конце цикла, и таким образом, наш цикл как минимум один раз отработает:

Dim j As Integer = -1 Do Console.WriteLine(j) j -= 1 Loop Until j < 0 ‘либо Do Console.WriteLine(j) j -= 1 Loop While j > 0

Операторы Continue и Exit

Нередко возникает необходимость не дожидаться окончания цикла, а сразу же выйти из цикла, в случае соблюдения определенного условия. Для этого используют оператор Exit, после которого указывают тип цикла, из которого осуществляется выход, например, Exit Do (Exit While):

Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 To 100 num -= 1 If num < 50 Then Exit For Next Console.WriteLine(num)

Существует и другая задача – осуществить выход не из цикла, а из текущего прохода или итерации и перейти к следующему. Для этого используют оператор Continue, после которого указывают тип цикла, из которого осуществляется выход, например, Continue While:

Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 To 10 num -= 7 If num < 50 AndAlso num > 25 Then Continue For End If Console.WriteLine(num) Next

В данном случае мы в каждом проходе цикла вычитаем из num число 7 и затем смотрим, не принадлежит ли число num интервалу от 25 до 50. И если принадлежит, переходим к новой итерации цикла, а если нет, то выводим его на экран.

Источник