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

Вход

Регистрация

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

 

= Мир MS Excel/Вставить в конструкцию if...else логический оператор or/and - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вставить в конструкцию if...else логический оператор or/and (Макросы/Sub)
Вставить в конструкцию if...else логический оператор or/and
vider Дата: Суббота, 16.01.2016, 17:17 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Необходимо в цикле пройти по листу и скрыть строки не соответствующие условию.
Условие отбора строк формируется динамически на основании данных другого листа.
[vba]
Код

Application.ScreenUpdating = False
For i = lFirstRow + 1 To lLastRow
If Not ((ActiveSheet.Cells(i, 1).Value Like F1Criteria1) & F1Operator & (ActiveSheet.Cells(i, 1).Value Like F1Criteria2)) Then
ActiveSheet.Rows(i).Hidden = True
End If
Next i
Application.ScreenUpdating = True
[/vba]
Переменная F1Operator содержит логический оператор сравнения (OR/AND).
Если явно указать оператор в конструкции if цикл отрабатывает корректно, при вставке переменной F1Operator в конструкцию if вываливается ошибка.
Подскажите как программно вставить оператор сравнения в конструкцию if или может есть другое решение данного вопроса.
PS: файл примера не прикрепил тк кода ничтожно мало.
 
Ответить
СообщениеНеобходимо в цикле пройти по листу и скрыть строки не соответствующие условию.
Условие отбора строк формируется динамически на основании данных другого листа.
[vba]
Код

Application.ScreenUpdating = False
For i = lFirstRow + 1 To lLastRow
If Not ((ActiveSheet.Cells(i, 1).Value Like F1Criteria1) & F1Operator & (ActiveSheet.Cells(i, 1).Value Like F1Criteria2)) Then
ActiveSheet.Rows(i).Hidden = True
End If
Next i
Application.ScreenUpdating = True
[/vba]
Переменная F1Operator содержит логический оператор сравнения (OR/AND).
Если явно указать оператор в конструкции if цикл отрабатывает корректно, при вставке переменной F1Operator в конструкцию if вываливается ошибка.
Подскажите как программно вставить оператор сравнения в конструкцию if или может есть другое решение данного вопроса.
PS: файл примера не прикрепил тк кода ничтожно мало.

Автор - vider
Дата добавления - 16.01.2016 в 17:17
Udik Дата: Суббота, 16.01.2016, 17:25 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Э, а Вы не пробовали вместо амперсанда AND использовать? Это если надо получить одновременную проверку по 3 условиям.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Суббота, 16.01.2016, 17:29
 
Ответить
СообщениеЭ, а Вы не пробовали вместо амперсанда AND использовать? Это если надо получить одновременную проверку по 3 условиям.

Автор - Udik
Дата добавления - 16.01.2016 в 17:25
vider Дата: Суббота, 16.01.2016, 17:36 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
а Вы не пробовали вместо амперсанда AND использовать?

Если явно прописать AND или OR вместо & F1Operator & все прекрасно работает.
 
Ответить
Сообщение
а Вы не пробовали вместо амперсанда AND использовать?

Если явно прописать AND или OR вместо & F1Operator & все прекрасно работает.

Автор - vider
Дата добавления - 16.01.2016 в 17:36
Udik Дата: Суббота, 16.01.2016, 17:41 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
все прекрасно работает

Какая неожиданность :o
Если учесть, что амперсанд предназначен для соединения текстовых строк, и преобразует к тексту данные при использовании, то просто теряюсь в догадках B)
соответственно у вас получиться что-то типа ложьложьложь или 000


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Суббота, 16.01.2016, 17:45
 
Ответить
Сообщение
все прекрасно работает

Какая неожиданность :o
Если учесть, что амперсанд предназначен для соединения текстовых строк, и преобразует к тексту данные при использовании, то просто теряюсь в догадках B)
соответственно у вас получиться что-то типа ложьложьложь или 000

Автор - Udik
Дата добавления - 16.01.2016 в 17:41
_Boroda_ Дата: Суббота, 16.01.2016, 18:20 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Переменная F1Operator содержит логический оператор сравнения (OR/AND)

А если не OR/AND туда засунуть, а + (плюс) и * (умножить)?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Переменная F1Operator содержит логический оператор сравнения (OR/AND)

А если не OR/AND туда засунуть, а + (плюс) и * (умножить)?

Автор - _Boroda_
Дата добавления - 16.01.2016 в 18:20
vider Дата: Суббота, 16.01.2016, 18:31 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Ничего не меняется, через переменную ошибка вываливается, на прямую в конструкцию "+" ставлю нормально
 
Ответить
Сообщение_Boroda_, Ничего не меняется, через переменную ошибка вываливается, на прямую в конструкцию "+" ставлю нормально

Автор - vider
Дата добавления - 16.01.2016 в 18:31
_Boroda_ Дата: Суббота, 16.01.2016, 18:50 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Да, все правильно. Так у Вас получается не выражение, а текстовая строка.
Посмотрите код, так, надеюсь, понятно будет. Пробегитесь по нему через F8 и посмотрите на значения переменных. В А5 на листе какое-то значение. Например, q
[vba]
Код
    F1Operator = "+"
    i = 5
    F1Criteria1 = "dqd"
    F1Criteria2 = "fqg"
    ff1_ = ActiveSheet.Cells(i, 1).Value Like F1Criteria1
    ff2_ = ActiveSheet.Cells(i, 1).Value Like F1Criteria2
    ff_ = ff1_ & F1Operator & ff2_
    f_ = Evaluate(ff_)
    If Not f_ Then
        ActiveSheet.Rows(i).Hidden = True
    End If
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДа, все правильно. Так у Вас получается не выражение, а текстовая строка.
Посмотрите код, так, надеюсь, понятно будет. Пробегитесь по нему через F8 и посмотрите на значения переменных. В А5 на листе какое-то значение. Например, q
[vba]
Код
    F1Operator = "+"
    i = 5
    F1Criteria1 = "dqd"
    F1Criteria2 = "fqg"
    ff1_ = ActiveSheet.Cells(i, 1).Value Like F1Criteria1
    ff2_ = ActiveSheet.Cells(i, 1).Value Like F1Criteria2
    ff_ = ff1_ & F1Operator & ff2_
    f_ = Evaluate(ff_)
    If Not f_ Then
        ActiveSheet.Rows(i).Hidden = True
    End If
[/vba]

Автор - _Boroda_
Дата добавления - 16.01.2016 в 18:50
vider Дата: Суббота, 16.01.2016, 20:47 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Спасибо, заработало с «+», с «OR/AND» так и не получилось только строку
[vba]
Код

If Not f_ Then
заменил на
If Not f_ = 1 Then
[/vba]
а то скрывало все строки
 
Ответить
Сообщение_Boroda_, Спасибо, заработало с «+», с «OR/AND» так и не получилось только строку
[vba]
Код

If Not f_ Then
заменил на
If Not f_ = 1 Then
[/vba]
а то скрывало все строки

Автор - vider
Дата добавления - 16.01.2016 в 20:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вставить в конструкцию if...else логический оператор or/and (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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