Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: d7d1cd от 10.02.2016, 09:53

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

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

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


P.S. В C++ есть такой оператор. Называется continue.
Название: Re: Оператор For
Отправлено: cheshiki1 от 10.02.2016, 10:19
вариант
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
Название: Re: Оператор For
Отправлено: d7d1cd от 10.02.2016, 10:26
Спасибо за ответ. Как я понимаю, специального оператора в VBA для этого нет?
Название: Re: Оператор For
Отправлено: vikttur от 10.02.2016, 11:01
Цитироватьспециального оператора в VBA для этого нет
GoTo - это мороженка на палочке или все-таки оператор? Вам нужен конкретный оператор перехода в начало? Зачем? В таком случае нужен оператор перехода на строку 5 цикла, на строку 7 (а вот мне так хочется). Чем универсальный GoTo не подходит?
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: d7d1cd от 10.02.2016, 12:57
Не нервничайте, пожалуйста. На мой вопрос: "Как я понимаю, специального оператора в VBA для этого нет?" можно было просто ответить: "Нет.". В С++ такой оператор есть и при программировании на этом языке я его часто использую. Очень жаль, что сейчас я вынужден писать на VBA по определенным причинам.
Всем спасибо за обсуждение.
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: vikttur от 10.02.2016, 13:39
Не нервничаю. Шучу.
Цитироватьможно было просто ответить: "Нет."
А потом, вполне  возможно, мог последовать вопрос о другом переходе. Уже не возникнет.
До кучи, для будущих поколений: Exit For - выход из цикла
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: kuklp от 11.02.2016, 08:49
Вообще-то таким оператором и является конструкция if..end if. Проверяйте в начале цикла условие, а в конце выход из проверки end if и переход к next. Зачем тут еще отдельный оператор? Какой в нем смысл, если все равно проверяется условие?
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: d7d1cd от 11.02.2016, 12:12
Я сейчас уже не вспомню, но читал в одной книге по программированию, что надо избегать оператора GoTo. Но даже это не самое важное. Повторюсь, что большую часть времени программирую на С++, где такой оператор есть и я подумал, что в VBA он тоже есть. По мне, отдельный оператор - это более удобно, нежели создание метки и безусловный переход к ней (может просто привычка?). Но так как в VBA нет такого оператора, буду использовать GoTo.
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: vikttur от 11.02.2016, 12:30
Цитироватьчитал в одной книге по программированию, что надо избегать оператора GoTo
И я слышал. Но применяю. Иногда без него - никак (вариант: не знаю, как)
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: d7d1cd от 11.02.2016, 12:51
Цитата: vikttur от 11.02.2016, 12:30
Иногда без него - никак
У меня пока не было такого случая, что без GoTo - никак.
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: vikttur от 11.02.2016, 13:09
Цитироватькак в цикле For немедленно перейти к началу цикла?
и как без GoTo?

https://habrahabr.ru/post/114211/
Интересно почитать. Не только статью, но и комменты.
ЦитироватьВ языке С есть много операторов, которые на самом деле являются банальным goto – условным или безусловным. Это все виды циклов for (...), while (...) {...}, do {...} while (...). Это анализ числовых переменных switch (...) {case ... case ...}
:)
ЦитироватьРазрабы ядра linux юзают goto и их волосы мягкие и шелковистые
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: cheshiki1 от 11.02.2016, 14:29
d7d1cd чем вас вариант2 с если не устроил? там и GOTo не используется и тот же быстрый переход .
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: vikttur от 12.02.2016, 00:03
Теперь понял.
Цитироватькак в цикле For немедленно перейти к началу цикла?...
C++ есть такой оператор. Называется continue
continue - переход к следующему шагу цикла, но не в начало работы цикла!
Естественно, здесь без GoTo совершенно спокойно, и Выше показали, как.

Не обратил внимания на пример в первом сообщении и вопрос  воспринял буквально: если находились на шаге 2 (5,10,17), то требуется вернуться к i=1, т.е. в начало работы For.
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: d7d1cd от 15.02.2016, 12:18
У меня возник вопрос к тем, кто считает, что отдельный оператор перехода к следующему шагу цикла, это излишество и можно просто использовать оператор GoTo. Зачем тогда в VBA оператор ExitFor? Ведь можно так же использовать оператор GoTo, предварительно приравняв переменную цикла максимальному (минимальному) значению.
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: vikttur от 15.02.2016, 20:17
Я не считаю.
Но считаю, чо ЛЮБОЙ опратор можно и нужно использовать, когда это можно и нужно :)

А о GoTo - как вариант замены того, чего нет.
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: kuklp от 16.02.2016, 02:23
Тема: Оператор немедленного перехода к началу цикла. При чем тут оператор ExitFor? Exit For - выход из цикла.
Цитата: cheshiki1 от 10.02.2016, 10:19
вариант
For i = 1 To 10
If i = 2 Then GoTo 1
Debug.Print i
1:
Next i

Этот же вариант без GoTo:
For i = 1 To 10
If i = 2 Then
else
Debug.Print i
end if
Next
Название: Re: Оператор немедленного перехода к началу цикла
Отправлено: MCH от 16.02.2016, 05:23
Еще как вариант, не совсем удобно, но также работает без Goto
For i = 1 To 10
    Do
        If i = 2 Then Exit Do
        Debug.Print i
    Loop While False
Next i