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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Цикл с несколькими условиями (Макросы/Sub)
Цикл с несколькими условиями
AVI Дата: Понедельник, 22.10.2018, 09:44 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 523
Репутация: 17 ±
Замечаний: 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
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 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
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 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
Группа: Админы
Ранг: Местный житель
Сообщений: 19162
Репутация: 4412 ±
Замечаний: ±

Excel 365 & 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]


"Черт возьми, Холмс! Но как??!!"
Ю-money 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
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 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
Группа: Проверенные
Ранг: Ветеран
Сообщений: 523
Репутация: 17 ±
Замечаний: 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
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

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


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

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

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


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

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

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