Страницы: 1
RSS
Код функции ИЛИ для макроса
 
Всем добрый день!

Если честно, даже не знаю как правильно сформулировать вопрос... Да и корректное ли название у темы.
Короче у меня есть определённые макросы (2шт), которые замечательно работают. Мне нужно написать макрос условия, в котором будет прописано что если, например, А1="текст" или "работа" или "много", то сработает макрос 1, если условие не соблюдается то другой макрос. С макросом условия вроде разобралась. Не знаю как прописать "или" в макросе. Есть ведь обычная функция эксель: ИЛИ(значение1;значение2;...) с помощью которого мы даем выбор ячейке... Можно ли такое же макросе прописать?

Заранее всем спасибо!

С уважением,
 
Справка developer на сайте майкрософт или google.ru
вбейте в запрос "пример использования конструкции "if then"
Изменено: Astroid1 - 25.08.2016 12:13:17
 
Код
Sub Main()
    If Range("A1") = "работа" Or Range("A1") = "много" Then
        Call Макрос1
    Else
        Call Макрос2
    End If
End Sub
 
Юрий М,
Спасибо! Блин, вот не додумалась сама)) Писала просто
Код
Sub Main()
    If Range("A1") = "работа" Or "много" Then
        Call Макрос1
    Else
        Call Макрос2
    End If
End Sub

:)
Изменено: Honey - 25.08.2016 12:18:29
 
Надо бы проверить, но думаю что как-то так.
Код
If Cells(1, 1) = "текст" or Cells(1, 1) = "работа" or Cells(1, 1) = "много" Then
  call macro1
end if
долго пишу :-(
Изменено: dred_fk - 25.08.2016 12:23:05
 
Ещё можно использовать ElseIf или конструкцию Select Case.
 
dred_fk, Спасибо)))
Юрий М, а можно поподробней? Чем они лучше?
 
Select Case удобнее. И в ячейку не нужно лазить много раз.
 
Цитата
Honey написал: Чем они лучше?
Имхо ничем. Elseif вместо Or по сути. А селект, если я правильно понимаю, обращаться в сиквелу? В данной задаче вообще не рентабельно. Опять же ИМХО.
 
Код
Select Case Cells(1, 1).Value
    Case "текст", "работа", "много": Call macro1
    Case Else: Call другоймакрос
End Select
 
Код
Sub Select_Case()
    Select Case Range("A1").Value
        Case Is = "работа", "много": Call Макрос1
        Case Else: Call Макрос2
    End Select
End Sub
Удобны тем, что при выполнения условия дальнейшие проверки не выполняются.
Иногда удобно так:
Код
Sub Else_If()
    If Range("A1") = "работа" Then
        Call Макрос1
    ElseIf Range("A1") = "много" Then
        Call Макрос1
    ElseIf Range("A1") = "текст" Then
        Call Макрос1
    Else
        Call Макрос2
    End If
End Sub
 
Цитата
dred_fk написал:
А селект <...> В данной задаче вообще не рентабельно.
Это почему? ))
 
Юрий М, dred_fk, Hugo, спасибо) Даже и не знала, что и так можно))
Юрий М,вот ради исключения второго варианта я и пыталась все условия вставить в один, с помощью ИЛИ. У меня этих вариантов много просто и каждый раз расписывать, куда ссылаться неудобным мне показалось)
Дальнейшие проверки... - т.е. работать будет быстрее?
 
Цитата
Юрий М написал: Это почему? ))
а потому что я с ума сошел со своей задачкой и вообще не о том подумал. Я ТАКОЕ решение в голове придумал, где без кейсов надо почему-то искать. Короче в голове дошел до маразма и поставил клеймо: можно, но не рентабельно.

Подтверждаю. Кейсом тоже можно :-) Можно еще на каждый чих отдельный иф. Но вот это будет совсем некрасиво :-)
 
Цитата
Honey написал: Дальнейшие проверки... - т.е. работать будет быстрее?
Конечно! Чем меньше проверок, тем меньше требуется времени ))
 
dred_fk, посмотрите, как с Select Case компактно получается, а Вы говорите... ))
 
Код
Sub Расчет()
    If Range("D11") = "один" Or Range("D11") = "два" Or Range("D11") = "три" Then
        Call M_Resoudr
    If Range("D11") = "четыре" Or Range("D11") = "пять" Or Range("D11") = "шесть" Or Range("D11") = "семь" Or Range("D11") = "восемь" Or Range("D11") = "девять" Or Range("D11") = "десять" Or Range("D11") = "одиннадцать" Then
        Call M_Resoudr1
    Else
        Call M_Resoudre
    End If
End Sub


Выдает ошибку... Я только свои значения подставила и все... Block if without End If...
Изменено: Honey - 25.08.2016 12:45:32
 
Если вариантов действительно много - то можно их предварительно собрать в словарь (или словари) и затем сверяться с ним. Например проверять наличие в словаре, или проверять значение по ключу.
 
Цитата
dred_fk написал:
Короче в голове дошел до маразма и поставил клеймо
Срочно отдохнуть! ))
 
Hugo, Не уловила) Можно поподробней?...
Кстати,  в сообщении выше видно сколько вариантов.. Хотя не исключены дополнения +3 где-то
 
dred_fk,  :D
Я даже благодарна, что Вы так прониклись задачкой)))  
 
Ну он и говорит, что не закрыт иф. В вашем случае
Код
Sub Расчет()
    If Range("D11") = "один" Or Range("D11") = "два" Or Range("D11") = "три" Then
        Call M_Resoudr
    End If ' Вот это забыли!
    If Range("D11") = "четыре" Or Range("D11") = "пять" Or Range("D11") = "шесть" Or Range("D11") = "семь" Or Range("D11") = "восемь" Or Range("D11") = "девять" Or Range("D11") = "десять" Or Range("D11") = "одиннадцать" Then
        Call M_Resoudr1
    Else
        Call M_Resoudre
    End If
End Sub
 
dred_fk, ааа... А я думала можно и так... Опять-таки из опыта формул:
Код
=ЕСЛИ(А1="один";макрос1;ЕСЛИ(А1="ДВА";макрос2);макрос3)
Ох, почему они такие разные в строении конструкций((
Спасибо!)
Изменено: Honey - 25.08.2016 12:53:23
 
Цитата
Honey написал:
Не уловила) Можно поподробней?...
Если значений сколько в примере +3 - то не парьтесь, это не много.
Вот если сотня или тысяча, или все строки текстового файла - тогда есть смысл в словаре :)
 
Hugo, Спасибо!
Всем большое спасибо!!! :)
Страницы: 1
Наверх