Новости:

Прикрепить к сообщению можно только файлы xls, gif, jpg, rar, zip,7z, bas, frm, cls, doc размером до 150 Кб.

Главное меню

Оператор немедленного перехода к началу цикла

Автор d7d1cd, 10.02.2016, 09:53

« назад - далее »

d7d1cd

d7d1cd, Оператор For - это не название темы. Всего лишь имя оператора. Название темы должно отражать суть задачи. А Ваш вопрос вообще не по этому оператору.

Привет всем. Подскажите, как в цикле For немедленно перейти к началу цикла? Есть ли какой-то оператор? Например:

For i = 1 to 10
   If <условие продолжить цикл со следующего значения i> Then <какой тут должен быть оператор?>
   <другой код цикла>
Next i


P.S. В C++ есть такой оператор. Называется continue.

cheshiki1

вариант
For i = 1 To 10
If i = 2 Then GoTo 1
Debug.Print i
1:
Next i
это же, другой подход
For i = 1 To 10
If i <> 2 Then
Debug.Print i
end if
Next i

d7d1cd

Спасибо за ответ. Как я понимаю, специального оператора в VBA для этого нет?

vikttur

#3
Цитироватьспециального оператора в VBA для этого нет
GoTo - это мороженка на палочке или все-таки оператор? Вам нужен конкретный оператор перехода в начало? Зачем? В таком случае нужен оператор перехода на строку 5 цикла, на строку 7 (а вот мне так хочется). Чем универсальный GoTo не подходит?

d7d1cd

Не нервничайте, пожалуйста. На мой вопрос: "Как я понимаю, специального оператора в VBA для этого нет?" можно было просто ответить: "Нет.". В С++ такой оператор есть и при программировании на этом языке я его часто использую. Очень жаль, что сейчас я вынужден писать на VBA по определенным причинам.
Всем спасибо за обсуждение.

vikttur

Не нервничаю. Шучу.
Цитироватьможно было просто ответить: "Нет."
А потом, вполне  возможно, мог последовать вопрос о другом переходе. Уже не возникнет.
До кучи, для будущих поколений: Exit For - выход из цикла

kuklp

Вообще-то таким оператором и является конструкция if..end if. Проверяйте в начале цикла условие, а в конце выход из проверки end if и переход к next. Зачем тут еще отдельный оператор? Какой в нем смысл, если все равно проверяется условие?
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

d7d1cd

Я сейчас уже не вспомню, но читал в одной книге по программированию, что надо избегать оператора GoTo. Но даже это не самое важное. Повторюсь, что большую часть времени программирую на С++, где такой оператор есть и я подумал, что в VBA он тоже есть. По мне, отдельный оператор - это более удобно, нежели создание метки и безусловный переход к ней (может просто привычка?). Но так как в VBA нет такого оператора, буду использовать GoTo.

vikttur

Цитироватьчитал в одной книге по программированию, что надо избегать оператора GoTo
И я слышал. Но применяю. Иногда без него - никак (вариант: не знаю, как)

d7d1cd

Цитата: vikttur от 11.02.2016, 12:30
Иногда без него - никак
У меня пока не было такого случая, что без GoTo - никак.

vikttur

#10
Цитироватькак в цикле For немедленно перейти к началу цикла?
и как без GoTo?

https://habrahabr.ru/post/114211/
Интересно почитать. Не только статью, но и комменты.
ЦитироватьВ языке С есть много операторов, которые на самом деле являются банальным goto – условным или безусловным. Это все виды циклов for (...), while (...) {...}, do {...} while (...). Это анализ числовых переменных switch (...) {case ... case ...}
:)
ЦитироватьРазрабы ядра linux юзают goto и их волосы мягкие и шелковистые

cheshiki1

d7d1cd чем вас вариант2 с если не устроил? там и GOTo не используется и тот же быстрый переход .

vikttur

#12
Теперь понял.
Цитироватькак в цикле For немедленно перейти к началу цикла?...
C++ есть такой оператор. Называется continue
continue - переход к следующему шагу цикла, но не в начало работы цикла!
Естественно, здесь без GoTo совершенно спокойно, и Выше показали, как.

Не обратил внимания на пример в первом сообщении и вопрос  воспринял буквально: если находились на шаге 2 (5,10,17), то требуется вернуться к i=1, т.е. в начало работы For.

d7d1cd

У меня возник вопрос к тем, кто считает, что отдельный оператор перехода к следующему шагу цикла, это излишество и можно просто использовать оператор GoTo. Зачем тогда в VBA оператор ExitFor? Ведь можно так же использовать оператор GoTo, предварительно приравняв переменную цикла максимальному (минимальному) значению.

vikttur

Я не считаю.
Но считаю, чо ЛЮБОЙ опратор можно и нужно использовать, когда это можно и нужно :)

А о GoTo - как вариант замены того, чего нет.