Vba excel ничего не делать
Условный оператор IF является основной частью любого языка программирования. Без него не обойтись при написании даже небольшой программы, в которой необходимо принять некоторое решение. Синтаксис конструкции If следующий:
If условие Then [Команда 1] [Else Команда 2]
Если перевести, то получается: Если условие Тогда Команда 1 Иначе Команда 2
Т.е. если условие истинно тогда выполняется некоторая Команда (Команды) иначе выполняются другие Команды.В этом варианте конструкции IF будет выполнено только одна Команда. Else можно пропустить.
Примечание: При такой форме условия в Visual Basic после ключевого слова Then обязательно должна идти команда, а так же слова Then и Else должны находиться на той же строке что и IF, иначе интерпретатор выдаст ошибку. Если для удобства восприятия необходимо Команду 1 перенести на новую строку, то необходимо воспользоваться символом "_" после Then.
If условие Then _
[Команда 1] _
[Else Команда 2]
При таком варианте использования условия будет выполнено только одно действие. Если необходимо выполнить множество действий после Then или Else, то воспользуйтесь следующим вариантом написания условия:
If условие Then
[Команда 1]
[Команда 2]
.
[Else]
[Команда 3]
[Команда 4]
End If
Ключевое слово Else можно так же, как и в первом варианте не использовать, если нет необходимости.
И третий вариант конструкции, при котором происходит проверка условия, если первое условие не выполнено
If условие 1 Then
[Команда 1]
[Команда 2]
.
[ElseIf условие 2 Then
[Команда 3]
[Команда 4]
[Else
[Команда 5]
[Команда 6]
End If
В условиях также можно использовать логическое И (And), ИЛИ(Or) и отрицание НЕ (Not).
Рассмотрим несколько примеров использования выше перечисленных конструкций.
Пример 1
If a=b Then msgbox "а равняется b" Else msgbox "а не равно b"
Пример 2
В этом варианте Else не используем.
If a=b Then msgbox "а равняется b"
Пример 3
Используя «_» для интерпретатора Basic такая запись равносильна записи в Примере 1
If a=b Then _
msgbox "а равняется b" _
Else msgbox "а не равно b"
Пример 4
If a=b Then
msgbox "а равняется b"
a = a+b
Else
msgbox "а неравно b"
c = b
End If
Пример 5
If a=b Then
msgbox "а равняется b"
ElseIf a>b Then
msgbox "а больше b"
Else
msgbox "b больше a"
End If
Exits a procedure or block and transfers control immediately to the statement following the procedure call or the block definition.
Syntax
Statements
Exit Do
Immediately exits the Do loop in which it appears. Execution continues with the statement following the Loop statement. Exit Do can be used only inside a Do loop. When used within nested Do loops, Exit Do exits the innermost loop and transfers control to the next higher level of nesting.
Exit For
Immediately exits the For loop in which it appears. Execution continues with the statement following the Next statement. Exit For can be used only inside a For . Next or For Each . Next loop. When used within nested For loops, Exit For exits the innermost loop and transfers control to the next higher level of nesting.
Exit Function
Immediately exits the Function procedure in which it appears. Execution continues with the statement following the statement that called the Function procedure. Exit Function can be used only inside a Function procedure.
To specify a return value, you can assign the value to the function name on a line before the Exit Function statement. To assign the return value and exit the function in one statement, you can instead use the Return Statement.
Exit Property
Immediately exits the Property procedure in which it appears. Execution continues with the statement that called the Property procedure, that is, with the statement requesting or setting the property's value. Exit Property can be used only inside a property's Get or Set procedure.
To specify a return value in a Get procedure, you can assign the value to the function name on a line before the Exit Property statement. To assign the return value and exit the Get procedure in one statement, you can instead use the Return statement.
In a Set procedure, the Exit Property statement is equivalent to the Return statement.
Exit Select
Immediately exits the Select Case block in which it appears. Execution continues with the statement following the End Select statement. Exit Select can be used only inside a Select Case statement.
Exit Sub
Immediately exits the Sub procedure in which it appears. Execution continues with the statement following the statement that called the Sub procedure. Exit Sub can be used only inside a Sub procedure.
In a Sub procedure, the Exit Sub statement is equivalent to the Return statement.
Exit Try
Immediately exits the Try or Catch block in which it appears. Execution continues with the Finally block if there is one, or with the statement following the End Try statement otherwise. Exit Try can be used only inside a Try or Catch block, and not inside a Finally block.
Exit While
Immediately exits the While loop in which it appears. Execution continues with the statement following the End While statement. Exit While can be used only inside a While loop. When used within nested While loops, Exit While transfers control to the loop that is one nested level above the loop where Exit While occurs.
Remarks
Do not confuse Exit statements with End statements. Exit does not define the end of a statement.
Example 1
In the following example, the loop condition stops the loop when the index variable is greater than 100. The If statement in the loop, however, causes the Exit Do statement to stop the loop when the index variable is greater than 10.
Example 2
The following example assigns the return value to the function name myFunction , and then uses Exit Function to return from the function:
Example 3
The following example uses the Return Statement to assign the return value and exit the function:
Цикл Do Until… Loop в VBA Excel предназначен для повторения блока операторов пока не выполняется заданное условие (возвращается значение False). Синтаксис этого цикла аналогичен синтаксису цикла Do While… Loop, который повторяется до тех пор, пока условие выполняется (возвращается значение True).
Синтаксис цикла Do Until… Loop
Синтаксис цикла Do Until… Loop существует в двух вариантах, определяющих, когда проверяется условие.
Условие проверяется до выполнения операторов:
Условие проверяется после выполнения операторов:
В квадратных скобках указаны необязательные атрибуты цикла Do Until… Loop.
Компоненты цикла Do Until… Loop
Компонент | Описание |
---|---|
condition | Обязательный атрибут. Условие выполнения цикла. Выражение, возвращающее значение типа Boolean. |
statements | Необязательный* атрибут. Операторы вашего кода. |
Exit Do | Необязательный атрибут. Оператор выхода** из цикла до его окончания. |
*Если не использовать в цикле свой код VBA, смысл применения цикла теряется.
**Очень полезный оператор для цикла Do Until… Loop, так как при некоторых обстоятельствах он может стать бесконечным. Если такой риск существует, следует предусмотреть возможность выхода из бесконечного цикла с помощью оператора Exit Do.
Примеры циклов Do Until… Loop
Простейшие циклы
Цикл Do Until… Loop с условием до исполняемых операторов:
Цикл Do Until… Loop с условием после исполняемых операторов:
В обоих случаях окно MsgBox выведет число 10. Когда значение переменной a будет равно 10, проверяемое условие выдаст значение True, и цикл будет остановлен.
Проход по строкам листа
У двух белок дупла расположены напротив друг друга. В каждом дупле по 100 шишек. В свободное время они бросают шишки в дупло напротив, попадают не всегда. Ниже, в таблице, указано количество шишек, брошенных каждой белкой, и сколько их попало в цель.
Дни | Игрок | Брошено | Попало в цель |
---|---|---|---|
1 день | Белка 1 | 15 | 6 |
1 день | Белка 2 | 12 | 7 |
2 день | Белка 1 | 14 | 8 |
2 день | Белка 2 | 16 | 7 |
3 день | Белка 1 | 20 | 9 |
3 день | Белка 2 | 14 | 6 |
4 день | Белка 1 | 26 | 10 |
4 день | Белка 2 | 13 | 5 |
5 день | Белка 1 | 17 | 4 |
5 день | Белка 2 | 21 | 7 |
Исходя из этих данных необходимо узнать, сколько шишек осталось у Белки 1 в дупле. Для этого необходимо вычесть из 100 шишек количество выброшенных Белкой 1 и прибавить шишки, заброшенные в ее дупло Белкой 2. Вычисления начинаем со второй строки (в первой заголовки) и в условии для цикла Do Until… Loop указываем «первая ячейка текущей строки является пустой». Таблица должна начинаться с первой ячейки рабочего листа «A1», и под ней, как минимум, одна строка должна быть пустой, точнее, первая ячейка этой строки.
Оператор If…Then…Else предназначен для передачи управления одному из блоков операторов в зависимости от результатов проверяемых условий.
Однострочная конструкция
Оператор If…Then…Else может использоваться в однострочной конструкции без ключевых слов Else, End If.
Синтаксис однострочной конструкции If…Then…
Компоненты однострочной конструкции If…Then…
- условие — числовое или строковое выражение, возвращающее логическое значение True или False;
- операторы — блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True.
Если компонент условие возвращает значение False, блок операторов конструкции If…Then… пропускается и управление программой передается следующей строке кода.
Пример 1
Многострочная конструкция
Синтаксис многострочной конструкции If…Then…Else
Компоненты многострочной конструкции If…Then…Else:
- условие — числовое или строковое выражение, следующее за ключевым словом If или ElseIf и возвращающее логическое значение True или False;
- операторы — блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True;
- пунктирная линия обозначает дополнительные структурные блоки из строки ElseIf [условие] Then и строки [операторы] .
Если компонент условие возвращает значение False, следующий за ним блок операторов конструкции If…Then…Else пропускается и управление программой передается следующей строке кода.
Самый простой вариант многострочной конструкции If…Then…Else:
Пример 2
Функция IIf
Функция IIf проверяет заданное условие и возвращает значение в зависимости от результата проверки.
Синтаксис функции
Компоненты функции IIf
- условие — числовое или строковое выражение, возвращающее логическое значение True или False;
- если True — значение, которое возвращает функция IIf, если условие возвратило значение True;
- если False — значение, которое возвращает функция IIf, если условие возвратило значение False.
Компоненты если True и если False могут быть выражениями, значения которых будут вычислены и возвращены.
Пример 3
Пример 4
Стоит отметить, что не зависимо от того, выполняется условие или нет, функция IIf вычислит оба выражения в параметрах если True и если False:
При нажатии кнопки «Cancel» или закрытии крестиком диалогового окна InputBox из первых двух примеров, генерируется ошибка, так как в этих случаях функция InputBox возвращает пустую строку. Присвоение пустой строки переменной d типа Integer вызывает ошибку. При нажатии кнопки «OK» диалогового окна, числа, вписанные в поле ввода в текстовом формате, VBA Excel автоматически преобразует в числовой формат переменной d. В третьем примере есть обработчик ошибок.
19 комментариев для “VBA Excel. Оператор If…Then…Else и функция IIf”
при ElseIf после Then выражение должно быть обязательно с новой строки
Спасибо, Александр!
Я изменил некоторые формулировки в статье, допускающие неоднозначное толкование. Кроме того, я решил проверить, что будет, если поместить при ElseIf выражение после Then, и вот что получилось:
Код работает! Но он не будет работать, если строки
заменить на строку
Конструкция:
if (condition)
then (action 1)
else (action 2)
Допустим, condition = true. Следовательно, выполняется action 1. Но затем операции, совершенные в action 1, приводят к тому, что условие уже не соблюдается, т.е. после завершения action 1 condition = false. Означает ли это, что сработает также конструкция else и будут выполняться операции action 2? Или условие всей конструкции if-then-else проверяется в один момент времени и не подвержено влиянию операций внутри конструкции?
Привет, Михаил!
Условие в вашей конструкции проверяется один раз:
И даже если в конструкции используется блок ElseIf . Then , для проверки условия используется первоначальное значение:
В обоих случаях MsgBox выведет число 5.
чем отличается однострочная и многострочная форма синтаксиса
Привет, Виктор!
Однострочная запись короче и работает только с одним условием.
Здравствуйте, Евгений!
Однострочная запись работает не только с одним условием.
Добрый вечер!
Здесь «одно условие» означает выражение, которое может состоять из нескольких входящий в него условий (лучше сказать «под-условий») и возвращает логическое значение True или False. Такое выражение может быть только одно в однострочной записи.
Второе условие расположено в многострочной записи после ключевого слова Then и операторов, выполняемых при истинном значении первого условия, и предваряется ключевым словом ElseIf.
Здравствуйте, Евгений!
Может знаете, что быстрее
Не знаю, не сравнивал. Измерьте скорость выполнения обоих вариантов с помощью функции MicroTimer.
Решить с помощью VBA
Определите, является ли заданное целое число А нечётным двузначным
числом.
Привет, Икром!
Решение может быть таким:
Здравствуйте!
«блок операторов после ключевого слова Else выполняется в любом случае, но структурный блок кода из строки Else и строки [операторы] не является обязательным и может быть пропущен».
Это только у меня вызывает недоумение?
«блок операторов после ключевого слова Else выполняется в любом случае»?! Да ну!
И то, что после «но» вовсе не противоречит первой части, хотя при употреблении «но» должно бы.
А по смыслу вторая это «после но» д.б. в отдельном предложении, даже в отдельном абзаце.
Добрый день!
Согласен. Это выражение касается функции IIf. Исправил. Спасибо за бдительность!
Есть столбик с процентами выполнения плана. Если больше 70%,то цвет текста зеленый, если меньше 40% то цвет текста красный. Как это прописать у меня получается только покрасить весь столбец в красный. Помогите пожалуйста я всю голову словмал что не так.
Павел, если в ячейке с процентным форматом отображается 90%, то фактически в ней содержится число 0,9. Вам надо сравнивать значения ячеек не с 70 и 40, а с 0,7 и 0,4.
Евгений, я так пробовал, но тогда сразу подсвечивается красным вся переменная.
В Excel VBA оператор IF Then Else позволяет проверить условие и выполнить соответствующее действие.
Это чрезвычайно ценно во многих ситуациях, как мы увидим в примерах далее в этом руководстве.
Чтобы дать вам простой пример, предположим, что у вас есть список оценок в Excel, и вы хотите выделить всех тех учеников, которые получили оценку A. Теперь, если я попрошу вас сделать это вручную, вы проверите оценку каждого ученика, и если она A, вы выделите его, а если нет, оставьте как есть.
Такую же логику можно построить в VBA, используя Если то иначе утверждение (и, конечно же, гораздо больше, чем просто выделение оценок).
В этом руководстве я покажу вам различные способы использования конструкции «If Then Else» в Excel VBA, а также некоторые практические примеры в действии.
Но прежде чем я углублюсь в детали, позвольте мне дать вам синтаксис оператора IF Then Else.
Если вы заинтересованы в изучении VBA простым способом, ознакомьтесь с моими Онлайн-обучение по Excel VBA.
Синтаксис - IF Then Else
Ниже приведен общий синтаксис конструкции If Then Else в VBA.
Обратите внимание, что часть Else этого оператора не является обязательной.
Теперь, если вам интересно, в чем разница между двумя синтаксисами, позвольте мне уточнить.
Первый синтаксис - это простой однострочный оператор IF THEN ELSE, в котором нет необходимости использовать оператор END IF.
Однако во втором синтаксисе часть true_code находится во второй строке. Это полезно, когда код, который вам нужно запустить в случае, если условие IF истинно, длинный и состоит из нескольких строк.
Когда вы разделяете оператор IF на несколько строк, вам нужно указать VBA, где заканчивается конструкция IF Then.
Следовательно, вам нужно использовать оператор End IF.
Если вы не используете End IF, когда это необходимо, VBA покажет вам ошибку - «Блокировать IF без END IF».
Примеры использования оператора IF Then в VBA
Чтобы дать вам представление о том, как оператор IF-THEN работает в VBA, позвольте мне начать с некоторых основных примеров (некоторые практические и более полезные примеры рассмотрены позже в этом руководстве).
Предположим, у вас есть оценка учащегося в ячейке A1, и вы хотите проверить, сдал ли учащийся экзамен или нет (порог проходных баллов равен 35).
Затем вы можете использовать следующий код:
В приведенном выше коде есть одна строка оператора IF, который проверяет значение в ячейке A1.
Если меньше 35, ничего не происходит.
Следующий код сделает это:
В приведенном выше коде используется оператор IF, а также оператор ELSE для выполнения двух разных условий. Когда оценка больше (или равна) 35, условие IF истинно, и выполняется код прямо под ним (все до оператора Else).
Но когда условие IF - FALSE, код переходит к части Else и выполняет в ней блок кода.
Обратите внимание, что когда мы используем одну строку оператора IF Then, нам не нужно использовать End IF. Но когда мы разбиваем его на несколько строк, нам нужно использовать оператор End If.
Вложенный IF Then (несколько операторов IF Then)
До сих пор мы использовали один оператор IF Then.
Если вам нужно проверить несколько условий, вы можете использовать:
- Множественные условия ЕСЛИ
- Оператор If Then Else
- IF Then Else Если Else построить
Позвольте мне показать вам, чем они отличаются и как использовать это в Excel VBA.
Несколько операторов IF Then
Давайте возьмем тот же пример использования результатов учащегося.
Для этого мы можем использовать приведенный ниже код:
Вы можете использовать несколько операторов IF Then, как показано выше. Хотя это работает, это не пример хорошего кодирования (альтернативы вы увидите ниже).
Если вы решите использовать это, помните, что эти утверждения должны быть независимыми или взаимоисключающими. Здесь важно знать, что в приведенной выше конструкции оцениваются все операторы IF, а те, в которых условие истинно, выполняется код.
Таким образом, даже если первый оператор IF верен, второй все равно будет оцениваться.
IF Then Else Утверждение
Для этого мы можем использовать приведенный ниже код:
В приведенном выше коде мы использовали несколько операторов IF (вложенный IF Then) с помощью Else.
Таким образом, внутри конструкции «IF Then Else» есть конструкция «IF Then Else». Этот тип вложения позволяет проверять наличие нескольких условий и запускать соответствующий блок кода.
IF Then Else Если Else Заявление
Приведенный выше код (который мы видели в предыдущем разделе) можно дополнительно оптимизировать с помощью оператора ElseIf.
В приведенном выше коде используется ElseIf, который позволяет нам сохранять все условия в одном единственном операторе IF Then.
Использование AND и OR в IF Then Else
До сих пор в этом руководстве мы проверяли только одно условие за раз.
Однако при наличии нескольких зависимых условий вы можете использовать оператор AND или OR с условиями IF.
Ниже приведен синтаксис использования условия И / ИЛИ с оператором IF Then.
В приведенном выше коде true_code выполняется только тогда, когда выполняются как Condition1, так и Condition2. Даже если одно из условий ложно, оно выполнит false_code.
С OR, даже если одно из условий истинно, он выполнит true_code. Только когда все условия ложны, он выполняет false_code.
Теперь давайте посмотрим, как операторы AND и OR работают с конструкцией IF Then Else.
Предположим, у вас есть баллы по двум предметам вместо одного, и вы хотите проверить выполнение следующих условий:
- Провал - При оценке менее 35 по любому из предметов.
- Проходить - Когда оценка больше или равна 35, но меньше 80 по обоим предметам.
- Пройти с отличием - Когда оценка больше 35 по обоим предметам и больше или равна 80 по одному или обоим предметам.
Вот код, который это сделает:
В приведенном выше коде используются операторы OR и AND.
Вы также можете написать тот же код с небольшими изменениями (используя ИЛИ вместо И).
Оба приведенных выше кода VBA дадут вам одинаковый результат. Лично я предпочитаю первый, поскольку в нем есть логическая последовательность проверки оценок (но это только я).
Использование Not Equal to in If Then
Во всех приведенных выше примерах мы использовали условия, которые проверяют, равно ли значение указанному значению или нет.
Вы также можете использовать аналогичные коды при проверке, когда значение не равно указанному значению в коде VBA. Не равно представленному в Excel VBA.
Чтобы увидеть практический пример использования, взгляните на Пример 1 ниже.
Использование If Then Else с циклами в VBA
До сих пор мы рассматривали несколько примеров, которые помогают понять, как операторы «IF-THEN» работают в VBA, однако бесполезны в практическом мире.
Если мне нужно оценивать учащихся, я легко могу сделать это с помощью функций Excel.
Итак, давайте рассмотрим несколько полезных и практических примеров, которые помогут вам автоматизировать некоторые вещи и повысить эффективность.
Пример 1. Сохраните и закройте все книги, кроме активной.
Если у вас открыто много книг и вы хотите быстро закрыть все, кроме активной книги, вы можете использовать приведенный ниже код,
Приведенный выше код сохранит и закроет все книги (кроме активной).
Он использует цикл For Next для просмотра коллекции всех открытых книг и проверки имени с помощью условия IF.
Если имя не совпадает с именем активной книги, она сохраняется и закрывается.
Если в какой-либо из книг есть код VBA, и вы не сохранили его как .xls или .xlsm, вы увидите предупреждение (поскольку коды vba теряются при сохранении в формате .xlsx).
Пример 2 - Выделение ячеек с отрицательными значениями
Предположим, у вас есть столбец, полный чисел, и вы хотите быстро выделить все ячейки с отрицательными значениями красным цветом. Это можно сделать с помощью приведенного ниже кода.
В приведенном выше коде используется цикл For Each и проверяется каждая ячейка в выбранном вами выборе. Если в ячейке указано отрицательное значение, она выделяется красным цветом с белым шрифтом.
Пример 3 - Скрыть весь лист, кроме текущего
Если вы хотите быстро скрыть все рабочие листы, кроме активного, вы можете использовать следующий код:
В приведенном выше коде цикл For Each используется для просмотра набора листов. Он проверяет имя каждого рабочего листа и скрывает его, если это не активный рабочий лист.
Пример 4 - Извлечение числовой части из буквенно-цифровой строки
Если у вас есть буквенно-цифровые строки в ячейках, и вы хотите извлечь из них числовую часть, вы можете сделать это, используя приведенный ниже код:
Этот код создаст в Excel настраиваемую функцию, которую можно использовать на листе (как обычную функцию).
Куда положить код VBA?
Хотите знать, где находится код VBA в вашей книге Excel?
В Excel есть серверная часть VBA, называемая редактором VB. Вам необходимо скопировать и вставить код в окно кода модуля VB Editor.
Читайте также: