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

Вход

Регистрация

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

 

= Мир MS Excel/Цикл с несколькими условиями - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Цикл с несколькими условиями (Макросы/Sub)
Цикл с несколькими условиями
AVI Дата: Понедельник, 22.10.2018, 09:44 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 453
Репутация: 7 ±
Замечаний: 0% ±

Excel 2016
Добрый день!
Я что-то напутал с циклом и у меня какой-то тупик.
Должно вылезти 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]
К сообщению приложен файл: ___-.xlsm(68.2 Kb)
 
Ответить
СообщениеДобрый день!
Я что-то напутал с циклом и у меня какой-то тупик.
Должно вылезти 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]

Автор - AVI
Дата добавления - 22.10.2018 в 09:44
Sancho Дата: Понедельник, 22.10.2018, 10:45 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 240
Репутация: 13 ±
Замечаний: 0% ±

2007, 2010, 2013
AVI, добрый!
А для чего повторяются [vba]
Код
exit for
[/vba] ? зачем тогда цикл?)
так оно и получается первую строку посмотрел, "й" не равно, дал сообщение "0 0" и вышел из цикла. или я чего то не понимаю.


Сообщение отредактировал Sancho - Понедельник, 22.10.2018, 10:49
 
Ответить
СообщениеAVI, добрый!
А для чего повторяются [vba]
Код
exit for
[/vba] ? зачем тогда цикл?)
так оно и получается первую строку посмотрел, "й" не равно, дал сообщение "0 0" и вышел из цикла. или я чего то не понимаю.

Автор - Sancho
Дата добавления - 22.10.2018 в 10:45
StoTisteg Дата: Понедельник, 22.10.2018, 10:49 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1049
Репутация: 89 ±
Замечаний: 0% ±

Excel 2010
Так надо?[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"

End Sub
[/vba]
К сообщению приложен файл: 6975200.xlsm(23.2 Kb)


Интуитивно понятный код - это когда интуитивно понятно, что это код.

Сообщение отредактировал StoTisteg - Понедельник, 22.10.2018, 10:50
 
Ответить
СообщениеТак надо?[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"

End Sub
[/vba]

Автор - StoTisteg
Дата добавления - 22.10.2018 в 10:49
Pelena Дата: Понедельник, 22.10.2018, 10:50 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 13221
Репутация: 2908 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Вы бы описали цель сего цикла, а то не совсем понятно, что надо
Как варианты
[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]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеВы бы описали цель сего цикла, а то не совсем понятно, что надо
Как варианты
[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]

Автор - Pelena
Дата добавления - 22.10.2018 в 10:50
_Boroda_ Дата: Понедельник, 22.10.2018, 13:59 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13502
Репутация: 5526 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Еще пара макросов без циклов
[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
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕще пара макросов без циклов
[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
[/vba]

Автор - _Boroda_
Дата добавления - 22.10.2018 в 13:59
AVI Дата: Понедельник, 22.10.2018, 17:36 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 453
Репутация: 7 ±
Замечаний: 0% ±

Excel 2016
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 вариантов решения. Это говорит, просто о нереально уровне владения темой.
К сообщению приложен файл: -1-.xlsm(22.9 Kb)
 
Ответить
Сообщение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
Дата добавления - 22.10.2018 в 17:36
StoTisteg Дата: Понедельник, 22.10.2018, 18:12 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1049
Репутация: 89 ±
Замечаний: 0% ±

Excel 2010
AVI, у меня всё работает. Вы небось опять свой макрос запускали вместо моего.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеAVI, у меня всё работает. Вы небось опять свой макрос запускали вместо моего.

Автор - StoTisteg
Дата добавления - 22.10.2018 в 18:12
Pelena Дата: Вторник, 23.10.2018, 00:04 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 13221
Репутация: 2908 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
опять не правильно работает
Дык Вы мой макрос переврали, конечно не работает


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
опять не правильно работает
Дык Вы мой макрос переврали, конечно не работает

Автор - Pelena
Дата добавления - 23.10.2018 в 00:04
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Цикл с несколькими условиями (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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