Добрый день! Я что-то напутал с циклом и у меня какой-то тупик. Должно вылезти 1 1, а выдает 0 0. Не могу понять почему. [vba]
Код
Sub rrrrrrr() ar = Range("Перечень_накл_tb") For k = 1 To UBound(ar) If ar(k, 3) = "й" Then If ar(k, 1) = "Отчет по дневному стационару" Then MsgBox "1 1" Exit For If ar(k, 1) <> "Отчет по дневному стационару" Then MsgBox "1 0" End If Exit For End If Else MsgBox "0 0" End If Exit For Next k End Sub
[/vba]
Добрый день! Я что-то напутал с циклом и у меня какой-то тупик. Должно вылезти 1 1, а выдает 0 0. Не могу понять почему. [vba]
Код
Sub rrrrrrr() ar = Range("Перечень_накл_tb") For k = 1 To UBound(ar) If ar(k, 3) = "й" Then If ar(k, 1) = "Отчет по дневному стационару" Then MsgBox "1 1" Exit For If ar(k, 1) <> "Отчет по дневному стационару" Then MsgBox "1 0" End If Exit For End If Else MsgBox "0 0" End If Exit For Next k End Sub
[/vba] ? зачем тогда цикл?) так оно и получается первую строку посмотрел, "й" не равно, дал сообщение "0 0" и вышел из цикла. или я чего то не понимаю.
AVI, добрый! А для чего повторяются [vba]
Код
exit for
[/vba] ? зачем тогда цикл?) так оно и получается первую строку посмотрел, "й" не равно, дал сообщение "0 0" и вышел из цикла. или я чего то не понимаю.Sancho
Сообщение отредактировал Sancho - Понедельник, 22.10.2018, 10:49
fl = False For Each cell In Worksheets("Медикаменты").Range("Перечень_накл_tb[[Период2]]").Cells If cell.Value = "й" Then If cell.Offset(, -2).Value = "Отчет по дневному стационару" Then MsgBox "1 1" fl = True Exit For Else MsgBox "1 0" fl = True Exit For End If End If Next cell If Not fl Then MsgBox "0 0"
End Sub
[/vba]
Так надо?[vba]
Код
Sub test()
Dim cell As Range Dim fl As Boolean
fl = False For Each cell In Worksheets("Медикаменты").Range("Перечень_накл_tb[[Период2]]").Cells If cell.Value = "й" Then If cell.Offset(, -2).Value = "Отчет по дневному стационару" Then MsgBox "1 1" fl = True Exit For Else MsgBox "1 0" fl = True Exit For End If End If Next cell If Not fl Then MsgBox "0 0"
Вы бы описали цель сего цикла, а то не совсем понятно, что надо Как варианты [vba]
Код
Sub rrrrrrr() ar = Range("Перечень_накл_tb") For k = 1 To UBound(ar) If ar(k, 3) = "й" Then If ar(k, 1) = "Отчет по дневному стационару" Then MsgBox "1 1" Else MsgBox "1 0" End If Exit Sub End If Next k MsgBox "0 0" End Sub
[/vba]
[vba]
Код
Sub rrrrrrr1() ar = Range("Перечень_накл_tb") fl = False For k = 1 To UBound(ar) If ar(k, 3) = "й" Then If ar(k, 1) = "Отчет по дневному стационару" Then MsgBox "1 1" Else MsgBox "1 0" End If fl = True End If Next k If Not fl Then MsgBox "0 0" End Sub
[/vba]
Вы бы описали цель сего цикла, а то не совсем понятно, что надо Как варианты [vba]
Код
Sub rrrrrrr() ar = Range("Перечень_накл_tb") For k = 1 To UBound(ar) If ar(k, 3) = "й" Then If ar(k, 1) = "Отчет по дневному стационару" Then MsgBox "1 1" Else MsgBox "1 0" End If Exit Sub End If Next k MsgBox "0 0" End Sub
[/vba]
[vba]
Код
Sub rrrrrrr1() ar = Range("Перечень_накл_tb") fl = False For k = 1 To UBound(ar) If ar(k, 3) = "й" Then If ar(k, 1) = "Отчет по дневному стационару" Then MsgBox "1 1" Else MsgBox "1 0" End If fl = True End If Next k If Not fl Then MsgBox "0 0" End Sub
Sub Макрос1() With ActiveSheet.ListObjects("Перечень_накл_tb").AutoFilter.Range 'автофильтруемой таблицы .AutoFilter Field:=3, Criteria1:="й" 'фильтруем по й On Error Resume Next 'пропуск всех ошибок дальше If Err Then 'если фильтр дал ошибку t_ = "0 0" GoTo A 'переход к метке А End If 'если вторая строка первый столбец (считая шапку) отфильтрованного равно ОДС If .Rows(2).Columns(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) = "Отчет по дневному стационару" Then t_ = "1 1" Else 'иначе t_ = "1 0" End If A: 'метка .AutoFilter Field:=3 'снимаем автофильтр MsgBox t_ 'выдаем сообщение End With End Sub '============================= Sub Макрос3() On Error Resume Next 'пропуск всех ошибок дальше With Range("Перечень_накл_tb[Период2]") 'для умной таблицы r_ = .Find(What:="й", LookIn:=xlValues, LookAt _ :=xlWhole, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row - .Row + 1 'ищем "й" через Контрл h If Err Then t_ = "0 0" 'если не нашли, то будет ошибка If .Offset(, -2).Cells(r_, 1) = "Отчет по дневному стационару" Then 'от найденного влево на 2 столбца и сравниваем с ОДС t_ = "1 1" 'если равно Else 'иначе t_ = "1 0" End If MsgBox t_ ''выдаем сообщение End With End Sub
[/vba]
Еще пара макросов без циклов [vba]
Код
Sub Макрос1() With ActiveSheet.ListObjects("Перечень_накл_tb").AutoFilter.Range 'автофильтруемой таблицы .AutoFilter Field:=3, Criteria1:="й" 'фильтруем по й On Error Resume Next 'пропуск всех ошибок дальше If Err Then 'если фильтр дал ошибку t_ = "0 0" GoTo A 'переход к метке А End If 'если вторая строка первый столбец (считая шапку) отфильтрованного равно ОДС If .Rows(2).Columns(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) = "Отчет по дневному стационару" Then t_ = "1 1" Else 'иначе t_ = "1 0" End If A: 'метка .AutoFilter Field:=3 'снимаем автофильтр MsgBox t_ 'выдаем сообщение End With End Sub '============================= Sub Макрос3() On Error Resume Next 'пропуск всех ошибок дальше With Range("Перечень_накл_tb[Период2]") 'для умной таблицы r_ = .Find(What:="й", LookIn:=xlValues, LookAt _ :=xlWhole, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row - .Row + 1 'ищем "й" через Контрл h If Err Then t_ = "0 0" 'если не нашли, то будет ошибка If .Offset(, -2).Cells(r_, 1) = "Отчет по дневному стационару" Then 'от найденного влево на 2 столбца и сравниваем с ОДС t_ = "1 1" 'если равно Else 'иначе t_ = "1 0" End If MsgBox t_ ''выдаем сообщение End With End Sub
StoTisteg, у Вас не получается так же как у меня. Тоже выдает 0 0 Pelena, смысл в том, что я перемудрил ищу одновременное совпадение двух показателей, и в случае нахождения такого совпадения происходит одно действие, а в случае не нахождения - другое.
[vba]
Код
Sub rrrrrrr() ar = Range("Перечень_накл_tb") For k = 1 To UBound(ar) If ar(k, 3) = "й" And ar(k, 1) = "Отчет по дневному стационару" Then MsgBox "1 1" Else MsgBox "1 0" End If Exit Sub Next k End Sub
[/vba] Что-то типа такого, но опять не правильно работает. Должно быть 1 1 , а выдает 1 0 _Boroda_, что меня всегда в Вас поражает так это то, что у Вас на одну задачу есть 10 вариантов решения. Это говорит, просто о нереально уровне владения темой.
StoTisteg, у Вас не получается так же как у меня. Тоже выдает 0 0 Pelena, смысл в том, что я перемудрил ищу одновременное совпадение двух показателей, и в случае нахождения такого совпадения происходит одно действие, а в случае не нахождения - другое.
[vba]
Код
Sub rrrrrrr() ar = Range("Перечень_накл_tb") For k = 1 To UBound(ar) If ar(k, 3) = "й" And ar(k, 1) = "Отчет по дневному стационару" Then MsgBox "1 1" Else MsgBox "1 0" End If Exit Sub Next k End Sub
[/vba] Что-то типа такого, но опять не правильно работает. Должно быть 1 1 , а выдает 1 0 _Boroda_, что меня всегда в Вас поражает так это то, что у Вас на одну задачу есть 10 вариантов решения. Это говорит, просто о нереально уровне владения темой.AVI