Добрый день! Возможно ли задать перескок на следующий шаг, при выполнении условия. Допустим в книге в определённом столбце я буду искать слово. И мне нужно узнать сколько листов, которые содержат хотябы 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]
Добрый день! Возможно ли задать перескок на следующий шаг, при выполнении условия. Допустим в книге в определённом столбце я буду искать слово. И мне нужно узнать сколько листов, которые содержат хотябы 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
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]
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]
_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]
_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]
Код
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]
Не понимаю зачем "перескакивать"? Проверяем условие - если ОК, то действуем, затем следующий шаг. Если не ОК, то следующий шаг. Где тут нужно шаг пропускать? Т.е. [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
Hugo, Вы рассматриваете конкретный пример. Его я привёл просто для описания. В самом деле, в этом примере, не было необходимости такого перескока. Но у меня ранее неоднократно возникала "нужда" выскочить из шага цикла на следующий шаг по условию. Но, конечно, всегда было возможно это обойти и чуть-чуть иначе направить мысль в коде. Тем не менее, именно такой "перескок", мне позволит более гибко изливать мысль в Код. А разве есть что-то плохое в :
For i = 1 To 3 If A = 222 Then GoTo A 'какой-то код A: Next i
?
Hugo, Вы рассматриваете конкретный пример. Его я привёл просто для описания. В самом деле, в этом примере, не было необходимости такого перескока. Но у меня ранее неоднократно возникала "нужда" выскочить из шага цикла на следующий шаг по условию. Но, конечно, всегда было возможно это обойти и чуть-чуть иначе направить мысль в коде. Тем не менее, именно такой "перескок", мне позволит более гибко изливать мысль в Код. А разве есть что-то плохое в :
GoTo стараются не использовать. А в этом конкретном случае оно вообще лишнее. Честно говоря я так и не понял что имеено нужно. Если какое-то значение цикла не нужно обрабатывать - достаточно проверки "if then"
GoTo стараются не использовать. А в этом конкретном случае оно вообще лишнее. Честно говоря я так и не понял что имеено нужно. Если какое-то значение цикла не нужно обрабатывать - достаточно проверки "if then"Hugo