Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перескок на следующий шаг в цикле - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перескок на следующий шаг в цикле (Макросы/Sub)
Перескок на следующий шаг в цикле
Roman777 Дата: Вторник, 21.04.2015, 10:14 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Добрый день!
Возможно ли задать перескок на следующий шаг, при выполнении условия. Допустим в книге в определённом столбце я буду искать слово. И мне нужно узнать сколько листов, которые содержат хотябы 1 такое слово в данном столбце. Хочу решить данную задачу в таком виде:
[vba]
Код
Sub пример1 ()
Dim sht as Worksheet
Dim i as integer
Dim k as integer
For each sht in ActiveWorkbook.Worksheets
      For i=1 to sht.cells(rows.count, 3).end(xlUp).row
       If sht.cells(i, 3)= Slovo Then
         k=k+1
         next step ' Как правильно выполнить этот шаг?
       End If
      Next i
Next sht
End Sub
[/vba]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 21.04.2015, 10:15
 
Ответить
СообщениеДобрый день!
Возможно ли задать перескок на следующий шаг, при выполнении условия. Допустим в книге в определённом столбце я буду искать слово. И мне нужно узнать сколько листов, которые содержат хотябы 1 такое слово в данном столбце. Хочу решить данную задачу в таком виде:
[vba]
Код
Sub пример1 ()
Dim sht as Worksheet
Dim i as integer
Dim k as integer
For each sht in ActiveWorkbook.Worksheets
      For i=1 to sht.cells(rows.count, 3).end(xlUp).row
       If sht.cells(i, 3)= Slovo Then
         k=k+1
         next step ' Как правильно выполнить этот шаг?
       End If
      Next i
Next sht
End Sub
[/vba]

Автор - Roman777
Дата добавления - 21.04.2015 в 10:14
_Boroda_ Дата: Вторник, 21.04.2015, 10:18 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Exit For
[vba]
Код
Sub ïðèìåð1()
Dim sht As Worksheet
Dim i As Integer
Dim k As Integer
For Each sht In ActiveWorkbook.Worksheets
     For i = 1 To sht.Cells(Rows.Count, 3).End(xlUp).Row
         If sht.Cells(i, 3) = "Slovo" Then
             k = k + 1
             Exit For
         End If
     Next i
Next sht
End Sub
[/vba]
Еще посмотрите метод Find - намного быстрее цикла
[vba]
Код
Columns("C:C").Find(What:="Slovo", ...
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеExit For
[vba]
Код
Sub ïðèìåð1()
Dim sht As Worksheet
Dim i As Integer
Dim k As Integer
For Each sht In ActiveWorkbook.Worksheets
     For i = 1 To sht.Cells(Rows.Count, 3).End(xlUp).Row
         If sht.Cells(i, 3) = "Slovo" Then
             k = k + 1
             Exit For
         End If
     Next i
Next sht
End Sub
[/vba]
Еще посмотрите метод Find - намного быстрее цикла
[vba]
Код
Columns("C:C").Find(What:="Slovo", ...
[/vba]

Автор - _Boroda_
Дата добавления - 21.04.2015 в 10:18
Roman777 Дата: Вторник, 21.04.2015, 10:28 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
_Boroda_, Спасибо большое! Хочу уточнить "Exit For" не останавливает цикл а именно выходит с текущего шага цикла и переходит к другому?


Много чего не знаю!!!!
 
Ответить
Сообщение_Boroda_, Спасибо большое! Хочу уточнить "Exit For" не останавливает цикл а именно выходит с текущего шага цикла и переходит к другому?

Автор - Roman777
Дата добавления - 21.04.2015 в 10:28
_Boroda_ Дата: Вторник, 21.04.2015, 10:36 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
содержат хотябы 1 такое слово

Вам как раз и нужно выйти из внутреннего цикла. Одно значение нашли и всё, хватит на этом листе искать.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
содержат хотябы 1 такое слово

Вам как раз и нужно выйти из внутреннего цикла. Одно значение нашли и всё, хватит на этом листе искать.

Автор - _Boroda_
Дата добавления - 21.04.2015 в 10:36
Roman777 Дата: Вторник, 21.04.2015, 10:43 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
_Boroda_, Вы правы, что-то я не подумал. Пример неподходящий взял. А нет ли возможности перескакивать на следующий шаг по условию? У меня возникала необходимость такая. Просто подходящего примера найти не могу. Можно так. Если бы я хотел изменять все ячейки, кроме ячеек, содержащих слово:
[vba]
Код
Sub Пример1()
Dim sht As Worksheet
Dim i As Integer
Dim k As Integer
For Each sht In ActiveWorkbook.Worksheets
For i = 1 To sht.Cells(Rows.Count, 3).End(xlUp).Row
If sht.Cells(i, 3) = "Slovo" Then
next step
End If
.................
'изменения ячейки
.................
Next i
Next sht
End Sub
[/vba]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 21.04.2015, 10:44
 
Ответить
Сообщение_Boroda_, Вы правы, что-то я не подумал. Пример неподходящий взял. А нет ли возможности перескакивать на следующий шаг по условию? У меня возникала необходимость такая. Просто подходящего примера найти не могу. Можно так. Если бы я хотел изменять все ячейки, кроме ячеек, содержащих слово:
[vba]
Код
Sub Пример1()
Dim sht As Worksheet
Dim i As Integer
Dim k As Integer
For Each sht In ActiveWorkbook.Worksheets
For i = 1 To sht.Cells(Rows.Count, 3).End(xlUp).Row
If sht.Cells(i, 3) = "Slovo" Then
next step
End If
.................
'изменения ячейки
.................
Next i
Next sht
End Sub
[/vba]

Автор - Roman777
Дата добавления - 21.04.2015 в 10:43
_Boroda_ Дата: Вторник, 21.04.2015, 10:57 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Самое простое вот так
[vba]
Код
    For i = 1 To 3
         If A = 222 Then GoTo A
         'какой-то код
A:
     Next i
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСамое простое вот так
[vba]
Код
    For i = 1 To 3
         If A = 222 Then GoTo A
         'какой-то код
A:
     Next i
[/vba]

Автор - _Boroda_
Дата добавления - 21.04.2015 в 10:57
Roman777 Дата: Вторник, 21.04.2015, 11:03 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
_Boroda_, Спасибо большое ещё раз!


Много чего не знаю!!!!
 
Ответить
Сообщение_Boroda_, Спасибо большое ещё раз!

Автор - Roman777
Дата добавления - 21.04.2015 в 11:03
Hugo Дата: Вторник, 21.04.2015, 12:17 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Не понимаю зачем "перескакивать"? Проверяем условие - если ОК, то действуем, затем следующий шаг. Если не ОК, то следующий шаг. Где тут нужно шаг пропускать?
Т.е.
[vba]
Код
    For i = 1 To 3
           If A <> 222 Then
               'какой-то код, меняющий A
           End If
       Next i
[/vba]
Хотя тут так и напрашивается exit for как только А станет 222 :)

Впрочем работает ведь и так тупо в лоб:
[vba]
Код
    For i = 1 To 10
         If i = 2 Then i = 3
         Debug.Print i
     Next
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Вторник, 21.04.2015, 12:27
 
Ответить
СообщениеНе понимаю зачем "перескакивать"? Проверяем условие - если ОК, то действуем, затем следующий шаг. Если не ОК, то следующий шаг. Где тут нужно шаг пропускать?
Т.е.
[vba]
Код
    For i = 1 To 3
           If A <> 222 Then
               'какой-то код, меняющий A
           End If
       Next i
[/vba]
Хотя тут так и напрашивается exit for как только А станет 222 :)

Впрочем работает ведь и так тупо в лоб:
[vba]
Код
    For i = 1 To 10
         If i = 2 Then i = 3
         Debug.Print i
     Next
[/vba]

Автор - Hugo
Дата добавления - 21.04.2015 в 12:17
Roman777 Дата: Вторник, 21.04.2015, 13:40 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Hugo, Вы рассматриваете конкретный пример. Его я привёл просто для описания. В самом деле, в этом примере, не было необходимости такого перескока. Но у меня ранее неоднократно возникала "нужда" выскочить из шага цикла на следующий шаг по условию. Но, конечно, всегда было возможно это обойти и чуть-чуть иначе направить мысль в коде. Тем не менее, именно такой "перескок", мне позволит более гибко изливать мысль в Код. А разве есть что-то плохое в :
    For i = 1 To 3
If A = 222 Then GoTo A
'какой-то код
A:
Next i

?


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 21.04.2015, 13:42
 
Ответить
СообщениеHugo, Вы рассматриваете конкретный пример. Его я привёл просто для описания. В самом деле, в этом примере, не было необходимости такого перескока. Но у меня ранее неоднократно возникала "нужда" выскочить из шага цикла на следующий шаг по условию. Но, конечно, всегда было возможно это обойти и чуть-чуть иначе направить мысль в коде. Тем не менее, именно такой "перескок", мне позволит более гибко изливать мысль в Код. А разве есть что-то плохое в :
    For i = 1 To 3
If A = 222 Then GoTo A
'какой-то код
A:
Next i

?

Автор - Roman777
Дата добавления - 21.04.2015 в 13:40
Hugo Дата: Вторник, 21.04.2015, 14:59 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
GoTo стараются не использовать. А в этом конкретном случае оно вообще лишнее.
Честно говоря я так и не понял что имеено нужно. Если какое-то значение цикла не нужно обрабатывать - достаточно проверки "if then"


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеGoTo стараются не использовать. А в этом конкретном случае оно вообще лишнее.
Честно говоря я так и не понял что имеено нужно. Если какое-то значение цикла не нужно обрабатывать - достаточно проверки "if then"

Автор - Hugo
Дата добавления - 21.04.2015 в 14:59
Roman777 Дата: Вторник, 21.04.2015, 15:49 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Hugo, я понял Вас. Мне именно хотелось понять есть ли способ выйти из текущего шага цикла на следующий шаг по условию)))


Много чего не знаю!!!!
 
Ответить
СообщениеHugo, я понял Вас. Мне именно хотелось понять есть ли способ выйти из текущего шага цикла на следующий шаг по условию)))

Автор - Roman777
Дата добавления - 21.04.2015 в 15:49
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перескок на следующий шаг в цикле (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!