Оператор If Then Else в Excel VBA (объяснено с примерами)

В 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.

Условие IF Then true_code [Else false_code]

Или

Условие IF Тогда true_code Else false_code End IF

Обратите внимание, что часть 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).

Затем вы можете использовать следующий код:

Sub CheckScore () Если Range ("A1"). Value> = 35 Then MsgBox "Pass" End Sub

В приведенном выше коде есть одна строка оператора IF, который проверяет значение в ячейке A1.

Если больше 35, отображается сообщение «Пройдено».

Если меньше 35, ничего не происходит.

Но что, если вы хотите показать сообщение в обоих случаях, независимо от того, сдал ли студент экзамен или не сдал.

Следующий код сделает это:

Sub CheckScore () Если Range ("A1"). Value> = 35 Then MsgBox "Pass" Else MsgBox "Fail" End If End Sub

В приведенном выше коде используется оператор 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

Давайте возьмем тот же пример использования результатов учащегося.

Если учащийся набрал меньше 35, отображается сообщение «Неудача», если оценка больше или равна 35, отображается сообщение «Пройдено».

Для этого мы можем использовать приведенный ниже код:

Sub CheckScore () Если Range ("A1"). Value = 35 Then MsgBox "Pass" End Sub

Вы можете использовать несколько операторов IF Then, как показано выше. Хотя это работает, это не пример хорошего кодирования (альтернативы вы увидите ниже).

Если вы решите использовать это, помните, что эти утверждения должны быть независимыми или взаимоисключающими. Здесь важно знать, что в приведенной выше конструкции оцениваются все операторы IF, а те, в которых условие истинно, выполняется код.

Таким образом, даже если первый оператор IF верен, второй все равно будет оцениваться.

IF Then Else Утверждение

Предположим, на этот раз, вместо того, чтобы просто отображать сообщение Pass / Fail, у нас есть еще одно условие.

Если учащийся набрал меньше 35, отображается сообщение «Неудача», если оценка больше или равна 35, отображается сообщение «Пройдено», а если оценка больше 80, отображается сообщение. "Пройдено с отличием".

Для этого мы можем использовать приведенный ниже код:

Sub CheckScore () If Range ("A1"). Value <35 Then MsgBox "Fail" Else If Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End If End Sub

В приведенном выше коде мы использовали несколько операторов IF (вложенный IF Then) с помощью Else.

Таким образом, внутри конструкции «IF Then Else» есть конструкция «IF Then Else». Этот тип вложения позволяет проверять наличие нескольких условий и запускать соответствующий блок кода.

IF Then Else Если Else Заявление

Приведенный выше код (который мы видели в предыдущем разделе) можно дополнительно оптимизировать с помощью оператора ElseIf.

Вот что мы пытаемся сделать: если учащийся набрал меньше 35, отображается сообщение «Неудача», если оценка больше или равна 35, отображается сообщение «Пройдено», а если оценка больше 80, отображается сообщение «Пройдено с отличием».

Sub CheckScore () If Range ("A1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

В приведенном выше коде используется ElseIf, который позволяет нам сохранять все условия в одном единственном операторе IF Then.

Использование AND и OR в IF Then Else

До сих пор в этом руководстве мы проверяли только одно условие за раз.

Однако при наличии нескольких зависимых условий вы можете использовать оператор AND или OR с условиями IF.

Ниже приведен синтаксис использования условия И / ИЛИ с оператором IF Then.

ЕСЛИ Условие1 И Условие2 Тогда true_code Иначе false_code Конец ЕСЛИ

В приведенном выше коде true_code выполняется только тогда, когда выполняются как Condition1, так и Condition2. Даже если одно из условий ложно, оно выполнит false_code.

С OR, даже если одно из условий истинно, он выполнит true_code. Только когда все условия ложны, он выполняет false_code.

Теперь давайте посмотрим, как операторы AND и OR работают с конструкцией IF Then Else.

Предположим, у вас есть баллы по двум предметам вместо одного, и вы хотите проверить выполнение следующих условий:

  • Провал - При оценке менее 35 по любому из предметов.
  • Проходить - Когда оценка больше или равна 35, но меньше 80 по обоим предметам.
  • Пройти с отличием - Когда оценка больше 35 по обоим предметам и больше или равна 80 по одному или обоим предметам.

Вот код, который это сделает:

Sub CheckScore () Если Range ("A1"). Value <35 Or Range ("B1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 And Range ("B1"). Значение <80 Тогда MsgBox "Пропустить" Иначе MsgBox "Пройти, с отличием" Конец Если Конец Подп.

В приведенном выше коде используются операторы OR и AND.

Вы также можете написать тот же код с небольшими изменениями (используя ИЛИ вместо И).

Sub CheckScore () If Range ("A1"). Value <35 Or Range ("B1"). Value 80 or Range ("B1"). Value> 80 Then MsgBox "Pass, with Distinction" Else MsgBox "Pass" End Если конец подписки

Оба приведенных выше кода VBA дадут вам одинаковый результат. Лично я предпочитаю первый, поскольку в нем есть логическая последовательность проверки оценок (но это только я).

Использование Not Equal to in If Then

Во всех приведенных выше примерах мы использовали условия, которые проверяют, равно ли значение указанному значению или нет.

Вы также можете использовать аналогичные коды при проверке, когда значение не равно указанному значению в коде VBA. Не равно представленному в Excel VBA.

Чтобы увидеть практический пример использования, взгляните на Пример 1 ниже.

Использование If Then Else с циклами в VBA

До сих пор мы рассматривали несколько примеров, которые помогают понять, как операторы «IF-THEN» работают в VBA, однако бесполезны в практическом мире.

Если мне нужно оценивать учащихся, я легко могу сделать это с помощью функций Excel.

Итак, давайте рассмотрим несколько полезных и практических примеров, которые помогут вам автоматизировать некоторые вещи и повысить эффективность.

Пример 1. Сохраните и закройте все книги, кроме активной.

Если у вас открыто много книг и вы хотите быстро закрыть все, кроме активной книги, вы можете использовать приведенный ниже код,

Sub SaveCloseAllWorkbooks () Dim wb As Workbook для каждого wb в рабочих книгах При ошибке возобновить следующий Если wb.Name ActiveWorkbook.Name Then wb.Save wb.Close End If Next wb End Sub

Приведенный выше код сохранит и закроет все книги (кроме активной).

Он использует цикл For Next для просмотра коллекции всех открытых книг и проверки имени с помощью условия IF.

Если имя не совпадает с именем активной книги, она сохраняется и закрывается.

Если в какой-либо из книг есть код VBA, и вы не сохранили его как .xls или .xlsm, вы увидите предупреждение (поскольку коды vba теряются при сохранении в формате .xlsx).

Пример 2 - Выделение ячеек с отрицательными значениями

Предположим, у вас есть столбец, полный чисел, и вы хотите быстро выделить все ячейки с отрицательными значениями красным цветом. Это можно сделать с помощью приведенного ниже кода.

Sub HighlightNegativeCells () Dim Cll As Range для каждого Cll в выбранном Если Cll.Value <0 Тогда Cll.Interior.Color = vbRed Cll.Font.Color = vbWhite End If Next Cll End Sub

В приведенном выше коде используется цикл For Each и проверяется каждая ячейка в выбранном вами выборе. Если в ячейке указано отрицательное значение, она выделяется красным цветом с белым шрифтом.

Пример 3 - Скрыть весь лист, кроме текущего

Если вы хотите быстро скрыть все рабочие листы, кроме активного, вы можете использовать следующий код:

Sub HideAllExceptActiveSheet () Dim ws As Worksheet для каждого ws в ThisWorkbook.Worksheets Если ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

В приведенном выше коде цикл For Each используется для просмотра набора листов. Он проверяет имя каждого рабочего листа и скрывает его, если это не активный рабочий лист.

Пример 4 - Извлечение числовой части из буквенно-цифровой строки

Если у вас есть буквенно-цифровые строки в ячейках, и вы хотите извлечь из них числовую часть, вы можете сделать это, используя приведенный ниже код:

Функция GetNumeric (CellRef As String) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 To StringLength If IsNumeric (Mid (CellRef, i, 1)) Then Result = Result & Mid (CellRef, i, 1) Next i GetNumeric = Результат Конечная функция

Этот код создаст в Excel настраиваемую функцию, которую можно использовать на листе (как обычную функцию).

Куда положить код VBA?

Хотите знать, где находится код VBA в вашей книге Excel?

В Excel есть серверная часть VBA, называемая редактором VB. Вам необходимо скопировать и вставить код в окно кода модуля VB Editor.

Вот как это сделать:

  1. Перейдите на вкладку Разработчик.
  2. Выберите вариант Visual Basic. Это откроет редактор VB в бэкэнде.
  3. На панели Project Explorer в редакторе VB щелкните правой кнопкой мыши любой объект книги, в которую вы хотите вставить код. Если вы не видите Project Explorer, перейдите на вкладку View и нажмите Project Explorer.
  4. Перейдите во вкладку "Вставить" и нажмите "Модуль". Это вставит объект модуля для вашей книги.
  5. Скопируйте и вставьте код в окно модуля.

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave