Разное

Vba условие: Операторы условия в VBA — Информационные технологии

Содержание

Операторы условия в VBA — Информационные технологии

Наиболее важные операторы условия, используемые в Excel VBA – это операторы If … Then и Select Case. Оба этих выражения проверяют одно или несколько условий и, в зависимости от результата, выполнят различные действия. Далее мы поговорим об этих двух операторах условия подробнее.

Оператор «If … Then» в Visual Basic

Оператор If … Then проверяет условие и, если оно истинно (TRUE), то выполняется заданный набор действий. Также может быть определён набор действий, которые должны быть выполнены, если условие ложно (FALSE).

Синтаксис оператора If … Then вот такой:

If Условие1 Then
   Действия в случае, если выполняется Условие1
ElseIf Условие2 Then
   Действия в случае, если выполняется Условие2
Else
   Действия в случае, если не выполнено ни одно из Условий
End If

В этом выражении элементы ElseIf и Else оператора условия могут не использоваться, если в них нет необходимости.

Ниже приведён пример, в котором при помощи оператора If … Then цвет заливки активной ячейки изменяется в зависимости от находящегося в ней значения:

If ActiveCell.Value < 5 Then
   ActiveCell.Interior.Color = 65280  'Ячейка окрашивается в зелёный цвет
ElseIf ActiveCell.Value < 10 Then
   ActiveCell.Interior.Color = 49407  'Ячейка окрашивается в оранжевый цвет
Else
   ActiveCell.Interior.Color = 255  'Ячейка окрашивается в красный цвет
End If

Обратите внимание, что как только условие становится истинным, выполнение условного оператора прерывается. Следовательно, если значение переменной ActiveCell меньше 5, то истинным становится первое условие и ячейка окрашивается в зелёный цвет. После этого выполнение оператора If … Then прерывается и остальные условия не проверяются.

Более подробно о применении в VBA условного оператора If … Then можно узнать на сайте Microsoft Developer Network.

Оператор «Select Case» в Visual Basic

Оператор Select Case схож с оператором If … Then в том, что он также проверяет истинность условия и, в зависимости от результата, выбирает один из вариантов действий.

Синтаксис оператора Select Case вот такой:

Select Case Выражение
Case Значение1
   Действия в случае, если результат Выражения соответствует Значению1
Case Значение2
   Действия в случае, если результат Выражения соответствует Значению2

Case Else
   Действия в случае, если результат Выражения не соответствует ни одному из перечисленных вариантов Значения
End Select

Элемент Case Else не является обязательным, но его рекомендуется использовать для обработки непредвиденных значений.

В следующем примере при помощи конструкции Select Case изменяется цвет заливки текущей ячейки в зависимости от находящегося в ней значения:

Select Case ActiveCell.Value
   Case Is <= 5
      ActiveCell.Interior.Color = 65280  'Ячейка окрашивается в зелёный цвет
   Case 6, 7, 8, 9
      ActiveCell.Interior.Color = 49407  'Ячейка окрашивается в оранжевый цвет
   Case 10
      ActiveCell.Interior.Color = 65535  'Ячейка окрашивается в жёлтый цвет
   Case 11 To 20
      ActiveCell.Interior.Color = 10498160  'Ячейка окрашивается в лиловый цвет
   Case Else
      ActiveCell.Interior.Color = 255  'Ячейка окрашивается в красный цвет
End Select

В приведённом выше примере показано, как можно различными способами задать значение для элемента Case в конструкции Select Case. Вот эти способы:

Case Is <= 5 Таким образом при помощи ключевого слова Case Is можно проверить, удовлетворяет ли значение Выражения условию вида <=5.
Case 6, 7, 8, 9 Так можно проверить, совпадает ли значение Выражения с одним из перечисленных значений. Перечисленные значения разделяются запятыми.
Case 10 Так проверяется, совпадает ли значение Выражения с заданным значением.
Case 11 To 20 Таким образом можно записать выражение для проверки, удовлетворяет ли значение Выражения условию вида от 11 до 20 (эквивалентно неравенству “11<=значение<=20”).
Case Else Вот так, при помощи ключевого слова Else, указываются действия для того случая, если значение Выражения не соответствует ни одному из перечисленных вариантов Case.

Как только одно из условий будет найдено, выполняются соответствующие действия и производится выход из конструкции Select Case. То есть в любом случае будет выполнена только одна из перечисленных ветвей Case.

Более подробную информацию о работе VBA оператора Select Case можно найти на сайте Microsoft Developer Network.

Оцените качество статьи. Нам важно ваше мнение:

Использование операторов If…Then…Else (VBA) | Microsoft Docs



  • Чтение занимает 2 мин

В этой статье

Можно использовать оператор If…Then…Else для выполнения определенного оператора или блока операторов в зависимости от значения условия.You can use the If…Then…Else statement to run a specific statement or a block of statements, depending on the value of a condition. Операторы If…Then…Else могут быть вложены в любое необходимое число слоев.If…Then…Else statements can be nested to as many levels as you need.

Однако для удобства читаемости лучше использовать оператор Select Case вместо нескольких уровней вложенных операторов If…Then…Else.However, for readability, you may want to use a Select Case statement rather than multiple levels of nested If…Then…Else statements.

Выполнение операторов, если условие равно TrueRunning statements if a condition is True

Чтобы выполнить только один оператор, когда условие равно True, используйте однострочный синтаксис оператора If…Then…Else.To run only one statement when a condition is True, use the single-line syntax of the If…Then…Else statement. В примере ниже показан однострочный синтаксис, пропускающий ключевое слово Else.The following example shows the single-line syntax, omitting the Else keyword.

Sub FixDate() 
 myDate = #2/13/95# 
 If myDate < Now Then myDate = Now 
End Sub

Чтобы выполнить несколько строк кода, необходимо использовать многострочный синтаксис.To run more than one line of code, you must use the multiple-line syntax. Этот синтаксис включает оператор End If, как показано в примере ниже.This syntax includes the End If statement, as shown in the following example.

Sub AlertUser(value as Long) 
 If value = 0 Then 
 AlertLabel.ForeColor = "Red" 
 AlertLabel.Font.Bold = True 
 AlertLabel.Font.Italic = True 
 End If 
End Sub

Выполнение определенных операторов, если условие равно True, и выполнение других операторов, если оно равно FalseRunning certain statements if a condition is True and running others if it’s False

Используйте оператор If…Then…Else для определения двух блоков исполняемых операторов: один блок выполняется, если условие равно True, а другой блок выполняется, если условие равно False.Use an If…Then…Else statement to define two blocks of executable statements: one block runs if the condition is True, and the other block runs if the condition is False.

Sub AlertUser(value as Long) 
 If value = 0 Then 
 AlertLabel.ForeColor = vbRed 
 AlertLabel.Font.Bold = True 
 AlertLabel.Font.Italic = True 
 Else 
 AlertLabel.Forecolor = vbBlack 
 AlertLabel.Font.Bold = False 
 AlertLabel.Font.Italic = False 
 End If 
End Sub

Проверка второго условия, если первое условие равно FalseTesting a second condition if the first condition is False

Можно добавить операторы ElseIf в оператор If…Then…Else для проверки второго условия, если первое условие равно False.You can add ElseIf statements to an If…Then…Else statement to test a second condition if the first condition is False. Например, в следующей процедуре функция вычисляет бонус на основе классификации задания.For example, the following function procedure computes a bonus based on job classification. Оператор, следующий за оператором Else, выполняется в том случае, если условия во всех операторах If и ElseIf равны False.The statement following the Else statement runs if the conditions in all of the If and ElseIf statements are False.

Function Bonus(performance, salary) 
 If performance = 1 Then 
 Bonus = salary * 0.1 
 ElseIf performance = 2 Then 
 Bonus = salary * 0.09 
 ElseIf performance = 3 Then 
 Bonus = salary * 0.07 
 Else 
 Bonus = 0 
 End If 
End Function

См. такжеSee also

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.



VBA Excel. Оператор If…Then…Else и функция IIf

Однострочная и многострочная конструкции оператора If…Then…Else и функция IIf, используемые в коде VBA Excel – синтаксис, компоненты, примеры.

Оператор If…Then…Else

Оператор If…Then…Else предназначен для передачи управления одному из блоков операторов в зависимости от результатов проверяемых условий.

Однострочная конструкция

Оператор If…Then…Else может использоваться в однострочной конструкции без ключевых слов Else, End If.

Синтаксис однострочной конструкции If…Then…

<strong>If</strong> [условие] <strong>Then</strong> [операторы]

Компоненты однострочной конструкции

If…Then…

  • условие – числовое или строковое выражение, возвращающее логическое значение True или False;
  • операторы – блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True;

Если компонент условие возвращает значение False, блок операторов конструкции If…Then… пропускается и управление программой передается следующей строке кода.

Пример 1

Sub primer1()

Dim d As Integer, a As String

d = InputBox(«Введите число от 1 до 20», «Пример 1», 1)

   If d > 10 Then a = «Число » & d & » больше 10″

MsgBox a

End Sub

Многострочная конструкция

Синтаксис многострочной конструкции If…Then…Else

<strong>If</strong> [условие] <strong>Then</strong>

[операторы]

<strong>ElseIf</strong> [условие] <strong>Then</strong>

[операторы]

—————-

<strong>Else</strong>

[операторы]

<strong>End If</strong>

Компоненты многострочной конструкции If…Then…Else:

  • условие – числовое или строковое выражение, следующее за ключевым словом If или ElseIf и возвращающее логическое значение True или False;
  • операторы – блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True.
  • пунктирная линия обозначает дополнительные структурные блоки из строки ElseIf [условие] Then и строки [операторы];
  • блок операторов после ключевого слова Else выполняется в любом случае, но структурный блок кода из строки Else и строки [операторы] не является обязательным и может быть пропущен.

Если компонент условие возвращает значение False, следующий за ним блок операторов конструкции If…Then…Else пропускается и управление программой передается следующей строке кода.

Самый простой вариант многострочной конструкции If…Then…Else:

<strong>If</strong> [условие] <strong>Then</strong>

[операторы]

<strong>Else</strong>

[операторы]

<strong>End If</strong>

Пример 2

Sub primer2()

Dim d As Integer, a As String

d = InputBox(«Введите число от 1 до 40», «Пример 2», 1)

   If d < 11 Then

      a = «Число » & d & » входит в первую десятку»

   ElseIf d > 10 And d < 21 Then

      a = «Число » & d & » входит во вторую десятку»

   ElseIf d > 20 And d < 31 Then

      a = «Число » & d & » входит в третью десятку»

   Else

      a = «Число » & d & » входит в четвертую десятку»

   End If

MsgBox a

End Sub

Функция IIf

Функция IIf проверяет заданное условие и возвращает значение в зависимости от результата проверки.

Синтаксис функции

<strong>IIf</strong>([условие], [если True], [если False])

Компоненты функции IIf
  • условие – числовое или строковое выражение, возвращающее логическое значение True или False;
  • если True – значение, которое возвращает функция IIf, если условие возвратило значение True;
  • если False – значение, которое возвращает функция IIf, если условие возвратило значение False.

Пример 3

Sub primer3()

Dim d As Integer, a As String

d = InputBox(«Введите число от 1 до 20», «Пример 3», 1)

   a = IIf(d < 10, d & » — число однозначное», _

   d & » — число двузначное»)

MsgBox a

End Sub


При нажатии кнопки «Cancel» или закрытии крестиком диалогового окна InputBox из примеров, генерируется ошибка, так как в этих случаях функция InputBox возвращает пустую строку. Присвоение пустой строки переменной d типа Integer вызывает ошибку. При нажатии кнопки «OK» диалогового окна, числа, вписанные в поле ввода в текстовом формате, VBA Excel автоматически преобразует в числовой формат переменной d.

Работа с условием If в VBA

   Условный оператор 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

Решения, условия, алгоритмы if, then, switch в VBA Excel

Принятие решений позволяет программистам контролировать поток выполнения сценария или одного из его разделов. Исполнение управляется одним или несколькими условными операторами.

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

VBA предоставляет следующие типы решений. Нажмите следующие ссылки, чтобы проверить их данные.

If…Then — Если То

Оператор If состоит из логического выражения, за которым следуют одно или несколько операторов. Если условие называется Истинным, выполняются утверждения в условии If (s). Если условие называется False, выполняются инструкции после цикла If.

Синтаксис

Ниже приведен синтаксис оператора If в VBScript.

If(boolean_expression) Then
   Statement 1
   .....
   .....
   Statement n
End If

Диаграмма потока

пример

Для демонстрационной цели давайте найдем самую большую из двух чисел Excel с помощью функции.

Private Sub if_demo_Click()
   Dim x As Integer
   Dim y As Integer
    
   x = 234
   y = 32
    
   If x > y Then
      MsgBox "X is Greater than Y"
   End If
End Sub

Когда приведенный выше код выполняется, он производит следующий результат.

X is Greater than Y

Если заявление состоит из логического выражения следует один или более операторов.

if..else заявление

Оператор If состоит из логического выражения, за которым следуют одно или несколько операторов. Если условие называется Истинным, выполняются утверждения в условии If (s). Если условие называется False, выполняются утверждения в разделе Else Part.

Синтаксис

Ниже приведен синтаксис оператора If Else в VBScript.

If(boolean_expression) Then
   Statement 1
   .....
   .....
   Statement n
Else
   Statement 1
   .....
   ....
   Statement n
End If

Диаграмма потока

пример

Для демонстрационной цели давайте найдем самую большую из двух чисел Excel с помощью функции.

Private Sub if_demo_Click()
   Dim x As Integer
   Dim y As Integer
    
   x = 234
   y = 324
    
   If x > y Then
      MsgBox "X is Greater than Y"
   Else
      Msgbox "Y is Greater than X"
   End If
End Sub

Когда приведенный выше код выполняется, он производит следующий результат.

Y is Greater than X

Если иное утверждение состоит из логического выражения следует один или более операторов. Если условие равно True, выполняются инструкции в операторах If . Если условие ложно, выполняется Else часть скрипта.

if … elseif..else statement

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

Синтаксис

Ниже приведен синтаксис оператора If Elseif-Else в VBScript.

If(boolean_expression) Then
   Statement 1
   .....
   .....
   Statement n
ElseIf (boolean_expression) Then
   Statement 1
   .....
   ....
   Statement n
ElseIf (boolean_expression) Then
   Statement 1
   .....
   ....
   Statement n
Else
   Statement 1
   .....
   ....
   Statement n
End If

Диаграмма потока

пример

Для демонстрационной цели давайте найдем самую большую из двух чисел Excel с помощью функции.

Private Sub if_demo_Click()
   Dim x As Integer
   Dim y As Integer
    
   x = 234
   y = 234
    
   If x > y Then
      MsgBox "X is Greater than Y"
   ElseIf y > x Then
      Msgbox "Y is Greater than X"
   Else
      Msgbox "X and Y are EQUAL"
   End If
End Sub

Когда приведенный выше код выполняется, он производит следующий результат.

X and Y are EQUAL

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

вложенные операторы if

Оператор If или ElseIf внутри другого оператора If или ElseIf. Внутренние операторы If выполняются на основе внешних операторов If. Это позволяет VBScript легко справляться с сложными условиями.

Синтаксис

Ниже приведен синтаксис инструкции Nested If в VBScript.

If(boolean_expression) Then
   Statement 1
   .....
   .....
   Statement n
   
   If(boolean_expression) Then
      Statement 1
      .....
      .....
      Statement n
   ElseIf (boolean_expression) Then
      Statement 1
      .....
      ....
      Statement n
   Else
      Statement 1
      .....
      ....
      Statement n
   End If
Else
   Statement 1


   Statement n
End If

пример

Для демонстрационной цели найдем тип положительного числа с помощью функции.

Private Sub nested_if_demo_Click()
   Dim a As Integer
   a = 23
  
   If a > 0 Then
      MsgBox "The Number is a POSITIVE Number"
      
      If a = 1 Then
         MsgBox "The Number is Neither Prime NOR Composite"
      ElseIf a = 2 Then
         MsgBox "The Number is the Only Even Prime Number"
      ElseIf a = 3 Then
         MsgBox "The Number is the Least Odd Prime Number"
      Else
         MsgBox "The Number is NOT 0,1,2 or 3"
      End If
   ElseIf a < 0 Then
      MsgBox "The Number is a NEGATIVE Number"
   Else
      MsgBox "The Number is ZERO"
   End If
End Sub

Когда приведенный выше код выполняется, он производит следующий результат.

The Number is a POSITIVE Number
The Number is NOT 0,1,2 or 3

Если или ElseIf заявление внутри другого, если или ELSEIF заявление.

инструкция switch

Когда пользователь хочет выполнить группу операторов в зависимости от значения выражения, используется случай переключения. Каждое значение называется случаем, и переменная включается в зависимости от каждого случая. Оператор Case Else выполняется, если тестовое выражение не соответствует ни одному из случаев, указанным пользователем.

Case Else — необязательный оператор в Select Case, однако для хорошей практики программирования всегда есть оператор Case Else.

Синтаксис

Ниже приведен синтаксис оператора Switch в VBScript.

Select Case expression
   Case expressionlist1
      statement1
      statement2
      ....
      ....
      statement1n
   Case expressionlist2
      statement1
      statement2
      ....
      ....
   Case expressionlistn
      statement1
      statement2
      ....
      ....   
   Case Else
      elsestatement1
      elsestatement2
      ....
      ....
End Select

пример

Для демонстрационной цели найдем тип целого с помощью функции.

Private Sub switch_demo_Click()
   Dim MyVar As Integer
   MyVar = 1
  
   Select Case MyVar
      Case 1
         MsgBox "The Number is the Least Composite Number"
      Case 2
         MsgBox "The Number is the only Even Prime Number"
      Case 3
         MsgBox "The Number is the Least Odd Prime Number"
      Case Else
         MsgBox "Unknown Number"
   End Select
End Sub

Когда приведенный выше код выполняется, он производит следующий результат.

The Number is the Least Composite Number

Переключатель заявление позволяет переменной быть проверены на равенство в отношении списка значений.

 С уважением, авторы сайта Компьютерапия

Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

Условные операторы If .. Then.. VBA для чайников

Читайте также








Условные операции



Условные операции
В JavaScript есть одна тернарная операция?:, которая позволяет присвоить значение переменной в зависимости от выполнения условия. Рассмотрим следующий пример:var sign = (a&gt;=0) ? «Положительное»: «Отрицательное»;В зависимости от результата выражения до






Условные операторы



Условные операторы
В процессе создания сценариев обычно требуется изменить порядок выполнения кода. В этом разделе рассматриваются механизмы ветвления, позволяющие выбирать одно из альтернативных действий в зависимости от условия.Оператор ifОператор if управляет






Условные переменные



Условные переменные
Условные переменные (или «condvars») очень похожи на ждущие блокировки, которые мы рассматривали выше. В действительности, ждущие блокировки — это надстройка над механизмом условных переменных, и именно поэтому в таблице, иллюстрировавшей использование






Условные операторы 



Условные операторы 
В JScript поддерживается условный оператор if…else. Общий вид этого оператора показан ниже:if (условие) выражение_1[else выражение_2]При выполнении оператора if…else оценивается логическое условие, заданное в круглых скобках после ключевого слова if. Если в






Операторы отношения и логические операторы



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

Оператор
Условие, при






Условные выражения



Условные выражения
Условное выражение позволяет нам выполнить одно из двух входящих в него выражений в зависимости от выполнения или невыполнения какого-либо условия. В качестве условия используется значение логической переменной или результат вычисления логического






26.8. Условные переменные



26.8. Условные переменные
Взаимное исключение позволяет предотвратить одновременный доступ к совместно используемой (разделяемой) переменной, но для того чтобы перевести поток в состояние ожидания (спящее состояние) до момента выполнения некоторого условия, необходим






Условные выражения



Условные выражения
Условное выражение позволяет нам выполнить одно из двух входящих в него выражений в зависимости от выполнения или невыполнения какого-либо условия. В качестве условия используется значение логической переменной или результат вычисления логического






Условные операторы If .. Then.



Условные операторы If .. Then.
Условные операторы If. . .Then, а также их вариации If. . .Then. . .Else и If. . .ElseIf используются значительно чаще любых других операторов. Довольно часто операторы If. . .Then встречаются и в других главах, но в этой они уж точно в центре внимания.
Основная форма






7.4. Вложенные условные операторы if/then



7.4. Вложенные условные операторы if/then
Операторы проверки условий if/then могут быть вложенными друг в друга. Конечный результат будет таким же как если бы результаты всех проверок были объединены оператором &amp;&amp;.if [ condition1 ]then if [ condition2 ] then do-something # Только если оба условия






22.8. Условные операторы



22.8. Условные операторы
В bash доступны два условных оператора — if и case. Синтаксис оператора if следующий:

Оператор if в bash работает аналогично оператору if в других языках программирования. Если истинно первое условие, то выполняется первый список команд, иначе — проверяется






Условные обозначения



Условные обозначения
Для лучшего понимания материала в книге принято несколько условных обозначений. Любое слово, выделенное моноширинным шрифтом, является командой, функцией или другим элементом синтаксиса ActionScript. Все эти элементы можно найти в документации по Flash.














Excel VBA — как добавить несколько операторов в If Then-If (Условие 1) Then (закрыть окно) и (End Sub)

Я создал макрос, в котором он копирует определенные ячейки и вставляет их в новое окно(Excel). Я пытаюсь добавить оператор If Then в макрос, где после вставки данных, если конкретная ячейка пуста (скажем, A2), я хочу, чтобы макрос закрыл это окно и завершил макрос. Я попробовал нижеприведенное кодирование, но оно дает мне ошибку компиляции: Block if without End IF .

Windows("Data.xlsx").Activate
Rows("13:18").Select
Selection.Copy
Windows("Data Paste.xlsx").Activate

Range("A1").Select
ActiveSheet.Paste


If ActiveSheet.Range("A2").Value = "" Then
ActiveWindow.Close
End Sub
End If

Range("A2:A6").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

Просто чтобы быть более ясным, мне нужно сначала скопировать строки 13:18 из «DATA.xlsx «и вставить в» Data Paste.xlsx», а затем проверить, пуста ли ячейка A2, и если да, то закрыть окно» Data Paste.xlsx » и остановить запуск макроса. Если ячейка A2 не пуста, я хочу, чтобы макрос продолжался, не закрывая окно, и продолжался с приведенным ниже кодом:

Range("A2:A6").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'Rest of the code

Пожалуйста, найдите мне решение.

vba

excel

macros

Поделиться

Источник


Pavan Nadig    

06 марта 2016 в 19:52

3 ответа


  • Добавление оператора IF и THEN в vba

    Мне нужно создать оператор IF и THEN в моем vba. Я попробовал этот код ниже, и хотя я не получаю никаких ошибок, он не работает (т. е. ничего не происходит, когда я запускаю макрос): Sub PrintAll() Dim BrokerCell As Range Dim Rng As Range Dim Wks As Worksheet Set Wks = Worksheets(PRINT PAGE) If…

  • Циклические функции If/Then в Excel VBA

    Я только начинаю изучать Excel VBA, и у меня возникают проблемы с конкретным упражнением. Учитывая столбец из 20 случайно сгенерированных целых чисел от 0 до 100 в столбце, я хочу написать программу VBA, которая записывает в столбец рядом с ней pass, если число больше или равно 50, и fail, если…



1

End Sub должен быть Exit Sub. Exit завершается рано, End означает естественный конец кода.

 If ActiveSheet.Range("A2").Value = "" Then
    ActiveWindow.Close
    Exit Sub
 End If

Поделиться


Scott Marcus    

06 марта 2016 в 21:30



1

Вы должны исправить несколько синтаксических ошибок, как показано в Примере Excel VBA Sub , показанном ниже :

Sub CopyClose()
    Windows("Data.xlsx").Activate
    Rows("13:18").Select
    Selection.Copy
    Windows("Data Paste.xlsx").Activate
    Range("A1").Select
    ActiveSheet.Paste
    ' check for the condition, and close the window and exit sub if true
    ' otherwise, execute the next line
    If ActiveSheet.Range("A2").Value = "" Then
        ActiveWindow.Close
    Else
        Range("A2:A6").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End If
End Sub

Надеюсь, это может помочь.

Поделиться


Alexander Bell    

06 марта 2016 в 19:56



0

Я нашел ответ, вместо End Sub использование Exit Sub работает просто идеально!!

Range("A1").Select
ActiveSheet.Paste


If ActiveSheet.Range("A2").Value = "" Then
ActiveWindow.Close
Exit Sub
End If

Range("A2:A6").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

Поделиться


Pavan Nadig    

06 марта 2016 в 20:55


  • Excel VBA: несколько операторов if then?

    Я анализирую ответы на опросы и просто хочу перекодировать их из назначенного числового значения обратно в исходное значение с помощью командной кнопки (это даже самый эффективный формат?). Я хотел бы избежать скуки от множества щелчков и Find/Replace. вот пример того, с чем я работаю: Sub…

  • Несколько операторов If и Then

    Вот код VBA, который у меня есть, и единственное, что работает, — это первый и последний операторы if и then . Но те двое, что посередине, — нет. Я хочу, чтобы если имя пользователя откроет книгу, то excel покажет только тот рабочий лист, который предназначен для этого человека. Эта книга будет в…


Похожие вопросы:

Оператор If-then в VBA

В настоящее время я пишу два набора операторов if-else, которые очень похожи. Они в основном сравнивают три выпадающих меню и гарантируют, что пользователь не проставил два совпадающих предпочтения….

Excel 2010 VBA-Циклические Операторы If Then

Новичок в VBA, но очень старательно учится. Недавно я написал макрос с IF Then Else для женщины на работе. К сожалению, она не так хорошо разбирается в компьютерах и не хочет находить макрос в…

Консолидация операторов VBA IF, THEN, повторяющих одну и ту же логику в непрерывном наборе строк

Я новичок, когда дело доходит до написания макрокода в VBA. Я работаю с Excel 2010, и я думаю, что у меня есть простая проблема. Я хочу скрыть строки на своем рабочем листе, которые удовлетворяют…

Добавление оператора IF и THEN в vba

Мне нужно создать оператор IF и THEN в моем vba. Я попробовал этот код ниже, и хотя я не получаю никаких ошибок, он не работает (т. е. ничего не происходит, когда я запускаю макрос): Sub PrintAll()…

Циклические функции If/Then в Excel VBA

Я только начинаю изучать Excel VBA, и у меня возникают проблемы с конкретным упражнением. Учитывая столбец из 20 случайно сгенерированных целых чисел от 0 до 100 в столбце, я хочу написать программу…

Excel VBA: несколько операторов if then?

Я анализирую ответы на опросы и просто хочу перекодировать их из назначенного числового значения обратно в исходное значение с помощью командной кнопки (это даже самый эффективный формат?). Я хотел…

Несколько операторов If и Then

Вот код VBA, который у меня есть, и единственное, что работает, — это первый и последний операторы if и then . Но те двое, что посередине, — нет. Я хочу, чтобы если имя пользователя откроет книгу,…

if then оператор, VBA, цикл

Вот пример того, что я пытаюсь сделать, — это Excel. Пищевая Группа / Продукты Питания / Яблоко / Банан / Морковь / Брокколи Я пишу заявление If Then, чтобы попытаться сопоставить продукты с их…

Excel VBA IF then IF заявление

Я использую оператор If Then If msgbox vbYesno и не знаю, как правильно из него выйти (я знаю, что Goto не чист). Может кто-нибудь сказать мне, в чем моя ошибка? Я не нашел никого, кто использовал…

Условие внутри цикла (VBA)

Я написал эту простую подпроцедуру для Excel VBA. Я намеренно использовал двоеточие (:) для разделения операторов. Почему это не работает? Sub ConditionInsideLoop() cb = 0: cd = 1: For ca = 1 To 5:…

Условная логика

в VBA

В большинстве случаев программирования определенные участки кода выполняются в зависимости от результата одного или нескольких условий. Для проверки условия предоставляется ряд ключевых слов и операторов, которые можно комбинировать. Проверка
условие дает результат True или False. В зависимости от результата инструкции, следующие за then, выполняются или пропускаются. Выполнение продолжается в следующей ветке — либо в блоке else (который обычно является необязательным), либо, если ветки else нет, то после окончания If.Условные операторы — это оператор If …. Then с оператором Else
или ElseIf и оператор Select case.

Форма: [выражение] [оператор отношения] [выражение] где в 1 условии у вас есть условные операторы, а в 2 или более — логические операторы.

Если … то

В логике условное выражение — это утверждение, образованное путем объединения двух предложений (или фактов) с использованием слов «если … то».
Речь идет о том, что должно произойти, если определенное условие выполнено, или что должно произойти, если оно не выполнено.Выполнение блока определяется указанным условием, логическим выражением, которое возвращает либо True , либо False .
По сути, это выглядит так:

  Если  Условие  Тогда
 DoSomething1 
 DoSomething2 
Конец, если  

Подробнее

Например:

  Если ExamScore> 6, то
MsgBox "Пройдено!"
Конец, если  

Остальное

Между If и End If вы можете добавить часть Else.Структура оператора If… Else выглядит следующим образом:

  Если  температура <-20  Тогда
 Оставайся у плиты 
Еще
 погулять 
Конец, если  

ElseIf

Не каждое условие можно свести к простому «или / или». Довольно часто есть более двух вариантов, которые вы хотите проверить.
Если первое условие — False, вы пытаетесь сопоставить следующее условие с помощью ElseIf.Вот структура оператора ElseIf:

  Если  Условие  Тогда
 DoSomething1 
ElseIf  Condition2  Then
 DoSomethingDifferent 
ElseIf  Condition3  Тогда
 DoSomethingDifferent 
Конец, если  

Вы также можете добавить часть Else в конце, чтобы уловить все остальные случаи:

  Если  Условие  Тогда
 DoSomething1 
ElseIf  Condition2  Then
 Сделай что-то другое 
Еще
...
Конец, если  
 Dim count As Integer 
count = 0
If count = 0 Then
MsgBox ("Нет элементов.") /> ElseIf count = 1 Then
MsgBox ("Есть 1 элемент.")
Else
MsgBox ("Есть" & count & "items.") Br /> End If Дополнительное уведомление (компания ByVal в виде строки, необязательный офис ByVal в виде строки = "По умолчанию")
Если office = "Default", то
MsgBox («офис не предоставлен - используется штаб-квартира»)
office = «штаб-квартира»
End If
'Введите код для уведомления штаб-квартиры или указанного офиса.
Концевой переводник

Если intSales> 1000 и IsThanksgiving (Date), то
Если strName = "Admin", то 'что-то дополнительное для администратора
intBonus = 200
Остальное
intBonus = 100
Конец, если
Остальное
intBonus = 25
Конец, если

Условные операторы

Условные выражения оцениваются как истинные или ложные и важны для того, чтобы сигнализировать компьютеру о необходимости выполнения одного действия (или набора действий), если условие истинно, и другого набора действий, если условие ложно.Условным выражениям должны предшествовать определенные ключевые слова, например If или Do While. Само условное выражение формируется следующим образом:

[выражение] [оператор отношения] [выражение]

Выражение по обе стороны от реляционного оператора может быть константой (строковой или числовой), переменной (строковой или числовой) или выражением, использующим такие символы, как +, -.

Если отметки> = 80, то
MsgBox "Очень хорошо"
Конец, если

Оператором отношения может быть один из следующих символов (или пары символов):

Оператор Значение
= Имеет значение
< Менее
<= Меньше или равно
> Больше
> = Больше или равно
<> Не равно

Логические операторы

Можно проверить более 1 условия.Три наиболее часто используемых логических оператора в Excel VBA: And, Or и Not.

Оператор Значение
Не Значение не то
и Проверить, истинны ли оба условия condition1 и condition2
Или Проверить, истинно ли условие1 или условие2

Пример

  Private Sub Constant_demo_Click ()
Сделать как целое
а = 10
Dim b как целое число
б = 0

Если a <> 0 и b <> 0, то
MsgBox ("Результат оператора И: Истина")
Еще
MsgBox ("Результат оператора И: ложь")
Конец, если

Если a <> 0 или b <> 0 Тогда
MsgBox ("Результат оператора ИЛИ: Истина")
Еще
MsgBox ("Результат оператора ИЛИ: Ложь")
Конец, если

Если не (a <> 0 или b <> 0), то
MsgBox ("Результат оператора НЕ: True")
Еще
MsgBox ("Результат оператора НЕ: Ложь")
Конец, если

Концевой переводник  

Сообщения в этом примере: Результат оператора И: Ложь, Результат оператора ИЛИ: Истина, Результат оператора НЕ: Ложь

Выбрать ящик

Оператор Select Case оценивает выражение только один раз в верхней части управляющей структуры.Вы используете это, чтобы
выберите значение из списка всех возможных значений. Выполняется только блок с условием совпадения. Условия оцениваются в указанном порядке. Является ли условие истинным,
тогда будет выполнен соответствующий код, а остальные условия не будут оцениваться.

  Размер в виде целого числа
возраст = 12
Выберите «Возраст обращения». Определите подходящую ветвь.
Случай от 0 до 17
MsgBox («Дочерний»)
Ситуация с 18 по 65
MsgBox («Взрослый»)
Case Else
MsgBox («Старший»)
Конечный выбор  

Подробнее о выбранном кейсе

Заявление IF

VBA — Полное руководство

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

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

«Угадай, если сможешь, и выбери, если посмеешь». — Пьер Корнель

Краткое руководство по VBA If Заявление

Описание Формат Пример
Если То Если [условие истинно] То
[сделать что-нибудь]
Конец Если
Если счет = 100 Тогда
Отладка.Печать «Perfect»
End If
Если Иначе Если [условие истинно] То
[сделать что-нибудь]
Иначе
[сделать что-нибудь]
Конец Если
Если счет = 100 Тогда
Debug.Print «Perfect»
Иначе
Отладка. Распечатать «Попробуйте снова»
Конец Если
Если ElseIf Если [условие 1 истинно] Тогда
[сделать что-нибудь]
ElseIf [условие 2 истинно] Тогда
[сделать что-нибудь]
Конец Если
Если оценка = 100 Тогда
Отладка.Печатать «Perfect»
ElseIf score> 50 Then
Debug.Print «Passed»
ElseIf score Then
Debug.Print «Try again»
End If
Else и ElseIf
(Иначе должно быть
после ElseIf)
Если [условие 1 верно] Тогда
[сделать что-нибудь]
ElseIf [условие 2 верно] Тогда
[сделать что-то]
Иначе
[сделать что-нибудь]
Конец Если
Если счет = 100 То
Отладка.Печатать «Perfect»
ElseIf score> 50 Then
Debug.Print «Passed»
ElseIf score> 30 Then
Debug.Print «Try again»
Else
Debug.Print «Yikes»
End If
Если без Endif
(Только одна строка)
Если [условие истинно] То [сделать что-нибудь] Если значение То значение = 0

В следующем коде показан простой пример использования оператора If

VBA.

Если Sheet1.Диапазон ("A1"). Значение> 5 Тогда
    Debug.Print «Значение больше пяти».
ElseIf Sheet1.Range ("A1"). Значение Тогда
    Debug.Print «значение меньше пяти».
Еще
    Debug.Print «значение равно пяти».
Конец, если
 

Вебинар

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

( Примечание: Участники веб-сайта имеют доступ к полному архиву вебинаров.)

Что такое оператор VBA If

Оператор VBA If используется, чтобы позволить вашему коду делать выбор во время его выполнения.

Вам часто нужно делать выбор на основе данных, которые читает ваш макрос.

Например, вы можете захотеть читать только тех студентов, у которых есть отметки выше 70. Читая каждого студента, вы должны использовать оператор If, чтобы проверять оценки каждого студента.

Важное слово в последнем предложении — check .Оператор If используется для проверки значения, а затем для выполнения задачи на основе результатов этой проверки.

Тестовые данные и исходный код

Мы собираемся использовать следующие тестовые данные для примеров кода в этом посте:

Вы можете загрузить тестовые данные со всем исходным кодом для публикации плюс решение упражнения в конце:

Формат оператора If-Then VBA

Формат оператора If Then следующий

Если [условие верно] Тогда
 

После ключевого слова If следует условие и ключевое слово Then

Каждый раз, когда вы используете оператор If Then , вы должны использовать соответствующий оператор End If .
Когда условие оценивается как истинное, обрабатываются все строки между If Then и End If .

Если [условие верно] Тогда
[строки кода]
[строки кода]
[строки кода]
Конец, если
 

Чтобы сделать ваш код более читабельным, рекомендуется делать отступы между операторами If Then и End If .

Отступ между If и End If

Отступ означает просто переместить строку кода на одну табуляцию вправо.Практическое правило — делать отступ между операторами начала и конца, например

.

Sub… End Sub
If Then… End If
If Then… ElseIf… Else… Endif
For… Next
Do While… Loop
Select Case… End Case

Чтобы сделать отступ в коде, вы можете выделить строки для отступа и нажать клавишу TAB. Нажатие Shift + Tab приведет к вытеснению кода, то есть переместит его на одну вкладку влево.

Вы также можете использовать значки на панели инструментов Visual Basic для отступа / отступа кода

Выберите код и щелкните значки, чтобы увеличить / уменьшить

Если вы посмотрите примеры кода на этом веб-сайте, вы увидите, что код имеет отступ.

Простой пример «если, то»

Следующий код распечатывает имена всех учащихся с отметками выше 50 по французскому языку.

https://excelmacromastery.com/
Дополнительные метки чтения ()
    
    Тусклый я до тех пор, пока
    'Пройдите по столбцам меток
    Для i = от 2 до 11
        'Проверьте, нет ли отметок больше 50
        Если Sheet1.Range ("C" & i) .Value> 50, то
            'Распечатать имя учащегося в непосредственном окне (Ctrl + G)
            Отлаживать.Печать Sheet1.Range ("A" & i) .Value & "" & Sheet1.Range ("B" & i) .Value
        Конец, если
    
    Следующий
    
Конец подписки
 

Результаты
Брайан Снайдер
Хуанита Муди
Дуглас Блэр
Лия Франк
Моника Бэнкс

Поэкспериментируйте с этим примером и проверьте значение или знак > и посмотрите, как меняются результаты.

Использование условий с оператором If VBA

Фрагмент кода между ключевыми словами If и Then называется условием.Условие — это утверждение, которое оценивается как истинное или ложное. В основном они используются с операторами Loops и If. Когда вы создаете условие, вы используете такие знаки, как>, <, <>,> =, <=, =.

Ниже приведены примеры условий

Условие Это верно, когда
x x меньше 5
x x меньше или равно 5
x> 5 x больше 5
x> = 5 x больше или равно 5
x = 5 x равно 5
x 5 x не равно 5
x> 5 И x x больше 5 И x меньше 10
x = 2 Или x> 10 x равно 2 ИЛИ x больше 10
Range («A1») = «John» Ячейка A1 содержит текст «John»
Диапазон («A1») «John» Ячейка A1 не содержит текста «John»

Вы могли заметить x = 5 как условие.Это не следует путать с x = 5 при использовании в качестве присваивания.

Когда в условии используется равенство, это означает, что «левая сторона равна правой стороне».

В следующей таблице показано, как знак равенства используется в условиях и присвоениях

Использование Equals Тип инструкции Значение
Цикл до x = 5 Условие x равен 5
Do While x = 5 Condition Is x равно 5
Если x = 5, то Условие Является ли x равным 5
Для x = 1 До 5 Присваивание Установите значение x на 1, затем на 2 и т. Д.
x = 5 Присвоение Установите значение x равным 5
b = 6 = 5 Присвоение и условие Присвойте b результату условия 6 = 5
x = MyFunc (5,6) Присвоение Присвойте x значению, возвращаемому функцией

Последняя запись в приведенной выше таблице показывает оператор с двумя равными. Первый знак равенства — это присвоение, а следующие за ним знаки равенства — это условия.

Сначала это может показаться запутанным, но подумайте об этом так. Любой оператор, который начинается с переменной и равенства, имеет следующий формат

[переменная] [=] [оценить эту часть]

Итак, все, что стоит справа от знака равенства, оценивается, и результат помещается в переменную. Снова взяв последние три задания, вы можете посмотреть на них так:

[x] [=] [5]
[b] [=] [6 = 5]
[x] [=] [MyFunc (5,6)]

Использование ElseIf с оператором If VBA

Оператор ElseIf позволяет выбирать из нескольких вариантов.В следующем примере мы печатаем знаки, которые находятся в диапазоне Отличия или Высокого Различия.

https://excelmacromastery.com/
Sub UseElseIf ()
    
    Если Marks> = 85, то
        Debug.Print "High Destinction"
    ElseIf Marks> = 75 Тогда
        Debug.Print "Destinction"
    Конец, если
    
Конец подписки
 

Важно понимать, что порядок важен. Сначала проверяется условие If.
Если это правда, то печатается «High Distinction» и оператор If завершается.
Если это ложь, то код переходит к следующему ElseIf и проверяет его условие.

Давайте поменяем местами If и ElseIf из последнего примера. Код теперь выглядит так:

https://excelmacromastery.com/
Sub UseElseIfWrong ()
    
    'Этот код неверен, поскольку ElseIf никогда не будет истинным
    Если Marks> = 75, то
        Debug.Print "Destinction"
    ElseIf Marks> = 85 Тогда
        'код здесь никогда не дойдет
        Отлаживать.Печать "High Destinction"
    Конец, если
    
Конец подписки
 

В этом случае мы сначала проверяем, не превышает ли значение 75. Мы никогда не будем печатать «High Distinction», потому что, если значение больше 85, будет срабатывать первый оператор if.

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

Если отметки> = 75 И отметки Тогда
    Debug.Print "Destinction"
ИначеЕсли отметки> = 85 И отметки Тогда
    Debug.Print "High Destinction"
Конец, если
 

Давайте расширим исходный код. Вы можете использовать любое количество операторов ElseIf. Мы добавим еще несколько, чтобы учесть все наши классификации оценок.

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

Использование Else с оператором if в VBA

Оператор VBA Else используется для улавливания всех.Это в основном означает «если бы ни одно условие не было истинным» или «все остальное». В предыдущем примере кода мы не включали оператор печати для отметки о сбое. Мы можем добавить это с помощью Else.

https://excelmacromastery.com/
Sub UseElse ()
    
    Если Marks> = 85, то
        Debug.Print "High Destinction"
    ElseIf Marks> = 75 Тогда
        Debug.Print "Destinction"
    ElseIf Marks> = 55 Тогда
        Debug.Print "Кредит"
    ElseIf Marks> = 40 Тогда
        Отлаживать.Распечатать "Пропуск"
    Еще
        'Для всех остальных марок
        Debug.Print "Fail"
    Конец, если
    
Конец подписки
 

Итак, если это не один из других типов, то это сбой.

Давайте напишем код, чтобы просмотреть наши образцы данных и распечатать учащегося и его классификацию:

https://excelmacromastery.com/
Подложка AddClass ()
    
    'получить последнюю строку
    Dim startRow As Long, lastRow As Long
    startRow = 2
    lastRow = Лист1.Ячейки (Sheet1.Rows.Count, 1) .End (xlUp) .Row
    
    Dim i As Long, Marks as Long
    Dim sClass как строка

    'Пройдите по столбцам меток
    Для i = startRow To lastRow
        Marks = Sheet1.Range ("C" & i) .Value
        'Отметьте и классифицируйте соответственно
        Если Marks> = 85, то
            sClass = "Высокая цель"
        ElseIf Marks> = 75 Тогда
            sClass = "Destinction"
        ElseIf Marks> = 55 Тогда
            sClass = "Кредит"
        ElseIf Marks> = 40 Тогда
            sClass = "Пройдено"
        Еще
            'Для всех остальных марок
            sClass = "Неудача"
        Конец, если
    
        'Запишите класс в столбец E
        Лист1.Диапазон ("E" & i) .Value = sClass
    Следующий
    
Конец подписки
 

Результаты выглядят так со столбцом E, содержащим классификацию знаков

Результаты

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

Использование логических операторов с оператором if в VBA

В операторе If может быть несколько условий.Ключевые слова VBA и и или позволяют использовать несколько условий.

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

Давайте еще раз посмотрим на наши образцы данных. Теперь мы хотим напечатать всех студентов, которые набрали от 50 до 80 баллов.
Мы используем и , чтобы добавить дополнительное условие. Код говорит: если оценка больше или равна 50 и меньше 75, то выведите имя ученика.

https: // excelmacromastery.com /
Sub CheckMarkRange ()

    Dim i As Long, отмечает как долго
    Для i = от 2 до 11
        
        'Сохранить оценки для текущего студента
        mark = Sheet1.Range ("C" & i) .Value
        
        'Проверьте, есть ли отметки больше 50 и меньше 75
        Если отметок> = 50 И отметок Тогда
             'Печатать имя и фамилию в окне "Немедленное" (Ctrl G)
             Debug.Print Sheet1.Range ("A" & i) .Value & Sheet1.Range ("B" & i).Значение
        Конец, если
    
    Следующий

Конец подписки
 

Результаты
Дуглас Блер
Лия Фрэнк
Моника Бэнкс

В следующем примере нам нужны студенты, изучающие историю или французский язык. Итак, в этом случае мы говорим, изучал ли студент историю ИЛИ если студент изучал французский язык:

'Описание: Использует ИЛИ, чтобы проверить, изучено ли исследование истории или французского языка.
Рабочий лист: знаки
'Вывод: результат распечатывается в окнах немедленного доступа (Ctrl + G)
https: // excelmacromastery.com / vba-если
Дополнительный пользователь ()
    
    'Получить диапазон данных
    Dim rg As Диапазон
    Установите rg = shMarks.Range ("A1"). CurrentRegion.

    Dim i As Long, Subject As String
    
    'Прочтите данные
    Для i = 2 To rg.Rows.Count
    
        'Получить тему
        subject = rg.Cells (i, 4) .Value
        
        'Проверьте, если у объекта больше 50 и меньше 80
        Если subject = "History" или subject = "French" Тогда
            'Напечатать имя и тему для немедленного окна (Ctrl G)
            Отлаживать.Выведите rg.Cells (i, 1) .Value & "" & rg.Cells (i, 4) .Value
        Конец, если
    
    Следующий
    
Конец подписки
 

Результаты
История Брайана
Брэдфорд Френч
История Дугласа
Кен Френч
Лия Френч
История Розали
История Джеки

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

Использование If и

AND работает следующим образом

Состояние 1 Условие 2 Результат
ИСТИНА ИСТИНА ИСТИНА
ИСТИНА ЛОЖЬ НЕВЕРНО
ЛОЖНО ИСТИНА НЕВЕРНО
ЛОЖНО ЛОЖЬ НЕВЕРНО

Что вы заметите, так это то, что И верно только тогда, когда все условия верны

Использование If Or

Ключевое слово OR работает следующим образом

Состояние 1 Условие 2 Результат
ИСТИНА ИСТИНА ИСТИНА
ИСТИНА ЛОЖЬ ИСТИНА
ЛОЖНО ИСТИНА ИСТИНА
ЛОЖНО ЛОЖЬ НЕВЕРНО

Вы заметите, что ИЛИ ложно только тогда, когда все условия ложны.

Использование И и ИЛИ вместе может затруднить чтение кода и привести к ошибкам. Использование скобок может прояснить условия.

https://excelmacromastery.com/
Sub OrWithAnd ()
    
 Тусклый объект как строка, помечается как длинный
 subject = "История"
 оценок = 5
    
 Если (subject = "French" Or subject = "History") И отметки> = 6 Тогда
     Debug.Print "True"
 Еще
     Debug.Print "False"
 Конец, если
    
Конец подписки
 

Использование, если не

Есть еще оператор НЕ.Это возвращает результат, противоположный условию.

Состояние Результат
ИСТИНА НЕВЕРНО
ЛОЖНО ИСТИНА

Следующие две строки кода эквивалентны.

Если отметки То
Если Not отмечает> = 40 Тогда
 

как

Если верно, то
Если не ложь, то
 

и

Если ложь, то
Если не верно, то
 

Заключение условия в скобки упрощает чтение кода

Если нет (баллы> = 40), то
 

Обычное использование Not при проверке, установлен ли объект.Возьмем, к примеру, рабочий лист. Здесь мы объявляем рабочий лист

Развернуть mySheet как рабочий лист
'Здесь какой-то код
 

Мы хотим проверить действительность mySheet , прежде чем использовать его. Мы можем проверить, ничего ли это.

Если mySheet - ничего, тогда
 

Невозможно проверить, есть ли это что-то, так как есть много разных способов, которыми это может быть. Поэтому мы используем Not с Nothing

Если не mySheet - это ничто, тогда
 

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

Если нет (mySheet - это ничего), то
 

Функция IIF

Обратите внимание, что вы можете загрузить приведенные ниже примеры IIF, а весь исходный код — сверху этого сообщения.

VBA имеет функцию, аналогичную функции Excel If. В Excel вы часто будете использовать функцию If следующим образом:

= ЕСЛИ (F2 = ””, ””, F1 / F2)

Формат:

= Если (условие, действие, если истина, действие, если ложь).

VBA имеет оператор IIf, который работает таким же образом. Давайте посмотрим на пример. В следующем коде мы используем IIf для проверки значения переменной val. Если значение больше 10, мы печатаем true, иначе мы печатаем false:

'Описание: Использование функции IIF для проверки числа.Рабочий лист: знаки
'Вывод: результат распечатывается в окнах немедленного доступа (Ctrl + G)
VBA IF Statement – A Complete Guide
Sub CheckNumberIIF () Dim result As Boolean Тусклое число по длине 'Печать True число = 11 результат = IIf (число> 10, Истина, Ложь) Debug.Print "Number" & number & "больше 10 равно" & результат 'Печатает ложь число = 5 результат = IIf (число> 10, Истина, Ложь) Отлаживать.Выведите "Число" & число & "больше 10 равно" & результат Конец подписки

В следующем примере мы хотим распечатать «Успешно» или «Не сдал» рядом с каждым учеником в зависимости от их оценок. В первом фрагменте кода мы будем использовать для этого обычный оператор VBA If:

https://excelmacromastery.com/
Sub CheckMarkRange ()

    Dim i As Long, отмечает как долго
    Для i = от 2 до 11
        
        'Сохранить оценки для текущего студента
        метки = Лист1.Диапазон ("C" и i). Значение
        
        'Проверить, сдал ли ученик или нет
        Если отметки> = 40 Тогда
             'Запишите имена в столбец F
             Sheet1.Range ("E" & i) = "Пройдено"
        Еще
             Sheet1.Range ("E" & i) = "Fail"
        Конец, если
    
    Следующий

Конец подписки
 

В следующем фрагменте кода мы будем использовать функцию IIf. Вы можете видеть, что здесь код намного аккуратнее:

'Описание: Использование функции IIF для отметок.Рабочий лист: знаки
'Вывод: результат распечатывается в окнах немедленного доступа (Ctrl + G)
VBA IF Statement – A Complete Guide
Sub CheckMarkRange () 'Получить диапазон данных Dim rg As Диапазон Установите rg = shMarks.Range ("A1"). CurrentRegion. Dim i As Long, помечает как Long, результат как String 'Пройдите по столбцам меток Для i = 2 To rg.Rows.Count 'Сохранить оценки для текущего студента метки = rg.Ячейки (i, 3) .Значение 'Проверить, сдал ли ученик или нет result = IIf (оценок> = 40, «Пройден», «Не сдан») 'Вывести имя и результат Debug.Print rg.Cells (i, 1) .Value, результат Следующий Конец подписки

Как видите, функция IIf очень полезна в простых случаях, когда вы имеете дело с двумя возможными вариантами.

Использование вложенного IIf

Вы также можете вкладывать операторы IIf, как в Excel.Это означает использование результата одного IIf с другим. Давайте добавим еще один тип результата к нашим предыдущим примерам. Теперь мы хотим напечатать «Отличие», «Успешно» или «Неудачно» для каждого ученика.

Используя обычный VBA, мы бы сделали это так

https://excelmacromastery.com/
Sub CheckResultType2 ()

    Dim i As Long, отмечает как долго
    Для i = от 2 до 11
        
        'Сохранить оценки для текущего студента
        mark = Sheet1.Range ("C" & i) .Value
        
        Если отметки> = 75 Тогда
             Лист1.Диапазон ("E" & i) .Value = "Отличие"
        ИначеЕсли отметки> = 40 Тогда
             'Запишите имена в столбец F
             Sheet1.Range ("E" & i) .Value = "Пройти"
        Еще
             Sheet1.Range ("E" & i) .Value = "Fail"
        Конец, если
    
    Следующий

Конец подписки
 

Используя вложенные IIfs, мы могли бы сделать это так:

'Описание: использование вложенной функции IIF для отметок.
Рабочий лист: знаки
'Вывод: результат распечатывается в окнах немедленного доступа (Ctrl + G)
https: // excelmacromastery.com / vba-если
Sub UsingNestedIIF ()

    'Получить диапазон данных
    Dim rg As Диапазон
    Установите rg = shMarks.Range ("A1"). CurrentRegion.
    
    Dim i As Long, помечает как Long, результат как String
    'Пройдите по столбцам меток
    Для i = 2 To rg.Rows.Count
        
        mark = rg.Cells (i, 3) .Value
        result = IIf (оценок> = 55, «Кредит», IIf (оценок> = 40, «Пройден», «Не пройден»))
        
        Отладка, печать меток, результат
    
    Далее я

Конец подписки
 

Использование вложенных IIf нормально в таких простых случаях.Код прост для чтения и, следовательно, вряд ли будет содержать ошибки.

На что обращать внимание

Важно понимать, что функция IIf всегда оценивает как истинную, так и ложную части оператора независимо от условия.

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

отметки = 0
total = IIf (баллы = 0, 0, 60 / баллы)
 

Однако, когда меток равно нулю, код выдаст ошибку «Делить на ноль».Это потому, что он оценивает как истинные, так и ложные утверждения. Утверждение False, то есть (60 / Marks) , оценивается как ошибка, потому что знаков равно нулю.

Если мы используем обычный оператор IF, он запустит только соответствующую строку.

отметки = 0
Если mark = 0 Тогда
    'Выполняет эту строку, только когда отметки равны нулю
    всего = 0
Еще
    'Выполняет эту строку, только если отметки не равны нулю
    итого = 60 / балл
Конец, если
 

Это также означает, что если у вас есть функции для True и False, то оба будут выполнены.Таким образом, IIF будет запускать обе функции, даже если использует только одно возвращаемое значение. Например

'Обе функции будут выполняться каждый раз
total = IIf (отметки = 0, Func1, Func2)
 

(Спасибо Дэвиду за указание на такое поведение в комментариях)

Если против IIf

Так что лучше?

В этом случае видно, что IIf короче и аккуратнее. Однако, если условия усложняются, лучше использовать обычный оператор If.Недостатком IIf является то, что он малоизвестен, поэтому другие пользователи могут не понимать его, а также код, написанный с помощью обычного оператора if.

Также, как мы обсуждали в последнем разделе, IIF всегда оценивает части True и False, поэтому, если вы имеете дело с большим количеством данных, оператор IF будет быстрее.

Мое практическое правило — использовать IIf, когда он будет простым для чтения и не требует вызовов функций. В более сложных случаях используйте обычный оператор If.

Использование Select Case

Оператор Select Case — это альтернативный способ написать оператор If с большим количеством ElseIf.Вы найдете этот тип оператора в большинстве популярных языков программирования, где он называется оператором Switch. Например, Java, C #, C ++ и Javascript имеют оператор switch.

Формат:

Выберите регистр [переменная]
    Дело [условие 1]
    Дело [условие 2]
    Случай [условие n]
    Case Else
Конец Выбрать
 

Давайте возьмем наш пример AddClass из выше и перепишем его, используя оператор Select Case.

https://excelmacromastery.com/
Подложка AddClass ()
    
    'получить последнюю строку
    Dim startRow As Long, lastRow As Long
    startRow = 2
    lastRow = Sheet1.Cells (Sheet1.Rows.Count, 1) .End (xlUp) .Row
    
    Dim i As Long, Marks as Long
    Dim sClass как строка

    'Пройдите по столбцам меток
    Для i = startRow To lastRow
        Marks = Sheet1.Range ("C" & i) .Value
        'Отметьте и классифицируйте соответственно
        Если Marks> = 85, то
            sClass = "Высокая цель"
        ElseIf Marks> = 75 Тогда
            sClass = "Destinction"
        ElseIf Marks> = 55 Тогда
            sClass = "Кредит"
        ElseIf Marks> = 40 Тогда
            sClass = "Пройдено"
        Еще
            'Для всех остальных марок
            sClass = "Неудача"
        Конец, если
    
        'Запишите класс в столбец E
        Лист1.Диапазон ("E" & i) .Value = sClass
    Следующий
    
Конец подписки
 

Ниже показан тот же код с использованием оператора Select Case. Главное, что вы заметите, это то, что мы используем «Case 85 to 100», а не «mark> = 85 And Mark <= 100».

https://excelmacromastery.com/
Подложка AddClassWithSelect ()
    
    'получить первую и последнюю строку
    Dim firstRow As Long, lastRow As Long
    firstRow = 2
    lastRow = Ячейки (Ячейки.Rows.Count, 1) .End (xlUp) .Row
    
    Dim i As Long, отмечает как долго
    Dim sClass как строка

    'Пройдите по столбцам меток
    Для i = firstRow To lastRow
        mark = Sheet1.Range ("C" & i) .Value
        'Отметьте и классифицируйте соответственно
        Выбрать отметки регистра
        Дело 85 к 100
            sClass = "Высокая цель"
        Дело 75 - 84
            sClass = "Destinction"
        Дело 55-74
            sClass = "Кредит"
        Дело 40-54
            sClass = "Пройдено"
        Case Else
            'Для всех остальных марок
            sClass = "Неудача"
        Конец Выбрать
        'Запишите класс в столбец E
        Лист1.Диапазон ("E" & i) .Value = sClass
    Следующий
    
Конец подписки
 

Использование футляра

Вы можете переписать оператор select в том же формате, что и исходный ElseIf. Вы можете использовать Is с футляром.

https://excelmacromastery.com/
Выбрать отметки регистра
    Случай> = 85
         sClass = "Высокая цель"
    Случай> = 75
        sClass = "Destinction"
    Случай> = 55
        sClass = "Кредит"
    Случай> = 40
        sClass = "Пройдено"
    Case Else
        'Для всех остальных марок
        sClass = "Неудача"
Конец Выбрать
 

Вы можете использовать Is для проверки нескольких значений.В следующем коде мы проверяем, равно ли отметок 5, 7 или 9.

https://excelmacromastery.com/
Sub TestMultiValues ​​()
    
    Тусклые отметки до тех пор, пока
    оценок = 7
    
    Выбрать отметки регистра
        Случай Is = 5, 7, 9
            Debug.Print True
        Case Else
            Debug.Print False
    Конец Выбрать
    
Конец подписки
 

Попробуйте это упражнение оператора If на языке VBA

В этом посте мы много рассказали об операторе If.Хороший способ помочь вам понять это — попытаться написать код, используя темы, которые мы рассмотрели. В следующем упражнении используются тестовые данные из этого поста. Ответ на упражнение ниже.

Нажмите здесь, чтобы загрузить тестовые данные

Ячейка G1 содержит название предмета. Мы можем изменить это вручную.

Когда наше приложение запускается, оно должно выписывать данные об учениках, которые изучали предмет, указанный в ячейке G1.
Мы хотим классифицировать их результат как пройденный или неудачный.Оценка ниже 40 считается провалом, а оценка 40 или выше — пропуском.

Наши результаты будут занесены в следующие столбцы:
Столбец H: Имя
Столбец I: Второе имя
Столбец J: Оценки
Столбец K: Тема
Столбец L: Тип результата — прошел или не прошел

Если ячейка G1 содержит «французский», ваш результат должен выглядеть следующим образом:

Результат упражнения

Ответ на упражнение

Решение для этого упражнения доступно как часть исходного кода, загруженного ниже:

Что дальше?

Бесплатное руководство по VBA Если вы новичок в VBA или хотите отточить свои существующие навыки VBA, почему бы не попробовать The Ultimate VBA Tutorial.

Сопутствующее обучение: Получите полный доступ к обучающим вебинарам по Excel VBA и всем учебным материалам.

( ПРИМЕЧАНИЕ: Планируете создание приложения VBA или управление им? Узнайте, как создать 10 приложений Excel VBA с нуля.)

Использование операторов If … Then … Else (VBA) | Документы Microsoft

  • 2 минуты на чтение

В этой статье

Вы можете использовать If… Затем … Иначе оператор для запуска определенного оператора или блока операторов, в зависимости от значения условия. If … Then … Else Операторы могут быть вложены на столько уровней, сколько вам нужно.

Однако для удобства чтения вы можете использовать оператор Select Case , а не несколько уровней вложенных операторов If … Then … Else .

Выполнение операторов, если условие истинно

Чтобы выполнить только один оператор, когда условие Истина , используйте однострочный синтаксис If…Тогда … Остальное заявление . В следующем примере показан однострочный синтаксис без ключевого слова Else .

  Sub FixDate ()
 myDate = # 2/13/95 #
 Если myDate  

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

  Sub AlertUser (значение Long)
 Если значение = 0 Тогда
 AlertLabel.ForeColor = "Красный"
 AlertLabel.Font.Bold = True
 AlertLabel.Font.Italic = True
 Конец, если
Конец подписки
  

Выполнение одних операторов, если условие истинно, и выполнение других, если оно ложно

Используйте оператор If ... Then ... Else для определения двух блоков исполняемых операторов: один блок выполняется, если условие True , а другой блок выполняется, если условие False .

  Sub AlertUser (значение Long)
 Если значение = 0 Тогда
 AlertLabel.ForeColor = vbRed
 AlertLabel.Font.Bold = True
 AlertLabel.Font.Italic = True
 Еще
 AlertLabel.Forecolor = vbBlack
 AlertLabel.Font.Bold = False
 AlertLabel.Font.Italic = False
 Конец, если
Конец подписки
  

Проверка второго условия, если первое условие ложно

Вы можете добавить операторов ElseIf к оператору If ... Then ... Else , чтобы проверить второе условие, если первое условие False . Например, следующая функциональная процедура вычисляет премию на основе классификации должностей.Оператор, следующий за оператором Else , выполняется, если условия во всех операторах If и ElseIf равны False .

  Функциональный бонус (результативность, зарплата)
 Если производительность = 1, то
 Бонус = зарплата * 0,1
 ElseIf performance = 2 Тогда
 Бонус = зарплата * 0,09
 ElseIf performance = 3 Тогда
 Бонус = зарплата * 0,07
 Еще
 Бонус = 0
 Конец, если
Конечная функция
  

См. Также

Поддержка и отзывы

У вас есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

Условные операторы VBA

Домашняя страница »Учебное пособие по Excel-VBA» Условные операторы VBA

Условные операторы VBA

Основными условными операторами Excel VBA являются оператор If ... Then и оператор Select Case. Оба они оценивают одно или несколько условий и, в зависимости от результата, выполняют определенные разделы кода.

Два типа условных операторов обсуждаются ниже по отдельности.

Visual Basic If... Then Оператор

Оператор If ... Then проверяет условие и, если оно оценивается как True, выполняет определенный раздел кода. Если условие оценивается как False, выполняется другой раздел кода.

Синтаксис оператора If ... Then:

If Condition1 Then

Код, который должен выполняться, если Condition1 оценивается как True

ElseIf Condition2 ThenCode, который должен выполняться, если Condition2 оценивается как True

.
.
.

Else

Код, который будет выполняться, если ни одно из предыдущих условий не оценивается как True

End If

В приведенном выше операторе If вы можете добавить столько условий ElseIf, сколько вам нужно. В качестве альтернативы, части ElseIf и Else условного оператора можно при желании опустить.

В приведенном ниже примере оператор If ... Then используется для раскрашивания текущей активной ячейки в зависимости от значения содержимого ячейки.

Если ActiveCell.Значение <5 Тогда

ActiveCell.Interior.Color = 65280

ElseIf ActiveCell.Value <10 Тогда

ActiveCell.Interior.Color = 49407

Иначе

ActiveCell.Interior.Color = 255

End If

Обратите внимание, что в В приведенном выше примере оператор If останавливается, как только он удовлетворяет условию. Следовательно, если значение ActiveCell меньше 5, первое условие удовлетворяется, и поэтому ячейка окрашивается в зеленый цвет. Затем выполняется выход из оператора If ... Then, без проверки каких-либо дальнейших условий.

Дополнительную информацию об операторе VBA If ... Then см. На веб-сайте Microsoft Developer Network.

Оператор Select Case в Visual Basic

Оператор Select Case аналогичен оператору If ... Then в том, что он проверяет выражение и выполняет различные разделы кода в зависимости от значения выражения.

Синтаксис оператора Select Case:

Select Case Expression Case Value1

Действия, если выражение соответствует Value1

Case Value2 Действия, если Expression соответствует Value2

.
.
.

Case Else

Действия, если выражение не соответствует ни одному из перечисленных вариантов

End Select

В приведенном выше коде часть условного оператора Case Else является необязательной.

В следующем примере оператор Select Case используется для раскрашивания текущей активной ячейки в зависимости от значения содержимого ячейки:

Select Case ActiveCell.ValueCase Is

ActiveCell.Interior.Color = 65280

Case 6 , 7, 8, 9

ActiveCell.Interior.Color = 49407

Case 10

ActiveCell.Interior.Color = 65535

Case Else

ActiveCell.Interior.Color = 255

End Select

В приведенном выше примере показаны различные способы определения различных случаев в операторе Select Case. . Это:

Case Is <= 5 Это пример того, как вы можете проверить, удовлетворяет ли ваше выражение условию, например <= 5, с помощью ключевого слова Case Is
Case 6, 7, 8 , 9 Это пример того, как вы можете проверить, соответствует ли ваше выражение любому из нескольких значений, разделив возможные значения запятыми
Случай 10 Это пример базовой проверки того, соответствует ли ваше выражение оценивает конкретное значение
Case Else Это пример условия Else, которое выполняется, если ваше выражение не соответствует ни одному из предыдущих случаев

Обратите внимание, что как только один case в операторе Select Case сопоставляется, и соответствующий код выполняется, весь оператор Select Case завершается.Следовательно, код никогда не войдет в более чем один из перечисленных случаев.

Для получения дополнительной информации о заявлении VBA Select Case см. Веб-сайт Microsoft Developer Network.

Перейти к Excel VBA Tutorial Часть 6 - Циклы
Вернуться к Excel VBA Tutorial Страница

Заявление IF VBA - объяснение с примерами

IF - один из самых популярных и часто используемых операторов в VBA. Оператор IF в VBA иногда также называется оператором IF THEN ELSE .Задача оператора IF - проверить, выполняется ли конкретное условие.

Если вы читали мои предыдущие сообщения, то помните, что мы обсуждали функцию If в Excel. Функция IF в Excel и оператор IF в VBA в основном предназначены для выполнения одних и тех же задач, но способ их работы немного отличается друг от друга.

Функция ЕСЛИ в Excel проверяет конкретное условие и, если условие истинно, возвращает одно значение, в противном случае возвращает второе значение.

С другой стороны, VBA IF Statement проверяет условие, но не возвращает никакого значения. Если условие оценивается как ИСТИНА, тогда оно просто передает программное управление инструкциям внутри блока IF и начинает их последовательно выполнять. Однако, если условие оценивается как FALSE, тогда управление программой передается операторам внутри блока Else.

Хотя, необязательно иметь блок Else с каждым оператором IF. В таком случае, если условие внутри оператора IF оценивается как FALSE, тогда программный контроль просто переходит к следующей инструкции (инструкции после блока IF) и начинает выполнять их последовательно.

Рекомендуемая литература : Вложенные IF в Excel

Синтаксис оператора IF в VBA

Теперь давайте посмотрим на синтаксис оператора IF в VBA:

 IF condition_1 THEN 
'Инструкции внутри первого блока IF
ELSEIF condition_2 Then
' Инструкции внутри блока ELSEIF
...
ELSEIF condition_n Затем
'Инструкции внутри n-го блока ELSEIF
ELSE
' Инструкции внутри блока Else
END IF

Здесь ' condition_1 ' - ' condition_n ' относятся к выражению, которое должен быть логическим значением (т.е.е. либо он должен быть ИСТИННЫМ, либо он должен быть ЛОЖНЫМ).

Ключевое слово « THEN » в основном является директивой, означающей, что инструкции, следующие сразу за оператором IF, должны выполняться, если условие оценивается как ИСТИНА.

Функция ЕСЛИ обычно заканчивается оператором « END IF », который сообщает приложению, что это последняя строка функции ЕСЛИ.

Как работает оператор IF в VBA

Условия вместе с операторами IF будут оцениваться последовательно.Это означает, что, прежде всего, будет оценен оператор IF с ' condition_1 ', если он оценивается как TRUE, тогда будут выполняться операторы внутри первого блока IF , а остальные блоки (блоки ELSEIF и ELSE) будут пропустить.

Но если первый оператор IF оценивается как FALSE, то будет оценен следующий оператор ELSEIF. Если он оценивается как ИСТИНА, то инструкции внутри блока ELSEIF будут последовательно выполняться, а остальные блоки (блоки ELSEIF и ELSE) будут пропущены.

Однако, если он также оценивается как ЛОЖЬ, тогда будет оценен следующий оператор ELSEIF и так далее. Наконец, если все IF и ELSEIF оцениваются как FALSE, то будет выполнен блок ELSE .

Примечание: Помните, что из блоков кода IF, ELSEIF и ELSE; только один блок кода будет выполняться одновременно в зависимости от условия.

Как использовать оператор IF в VBA

Теперь давайте разберемся, как использовать оператор IF в VBA.

Перед тем, как предшествовать, давайте проясним нашу цель.

Цель: здесь мы сгенерируем случайное число от 1 до 10, а затем наша задача - определить, меньше ли сгенерированное число 5, равно 5 или больше 5.

Итак, мы попытаемся написать VBA программа как:

 Sub IF_Test () 
Dim num As Integer
num = WorksheetFunction.RandBetween (1, 10)
Если num> 5, то
MsgBox num & "больше 5"
ElseIf num = 5 Then
MsgBox num & "равно 5"
Else
MsgBox num & "меньше 5"
End If
End Sub

Объяснение: В приведенном выше коде мы использовали функцию Excel RandBetween для генерации любого случайного числа из 1 - 10.После этого мы использовали оператор IF, чтобы проверить, больше ли это число 5, равно 5 или меньше 5.

На основе сгенерированного числа любое из трех условий будет оцениваться как ИСТИНА и подходящее появится окно сообщения.

Как этот код работает в трех условиях:

Если случайное число больше 5: давайте рассмотрим, что сгенерировано случайное число 7. Программа начинается со строки-1 и выполняет все инструкции последовательно до строки-4.Когда он достигает Строки-4, он проверяет « Если 7> 5 », что ИСТИНА. Таким образом, он переходит к инструкции, находящейся непосредственно под ней, и выдает сообщение « 7 больше, чем 5 ». После этого он сразу переходит к строке 10 и выходит из всего оператора IF.

Если случайное число равно 5: давайте рассмотрим, что сгенерированное случайное число равно 5. В этом случае, когда программный элемент управления достигает Строки-4, он проверяет « Если 5> 5 », что ЛОЖЬ. Таким образом, он пропускает блок IF и переходит к оператору ELSEIF, здесь он проверяет « If 5 = 5 », который оценивается как TRUE.Таким образом, появляется сообщение « 5 равно 5 ». (Я знаю, что это странное сообщение, но я просто использовал его, чтобы помочь вам разобраться в этом.)

После этого программный элемент управления напрямую переходит к Строке-10, пропускает часть ELSE и выходит из всего оператора IF .

Если случайное число меньше 5: давайте рассмотрим, что сгенерированное случайное число равно 3. Итак, в этом случае, когда программный элемент управления достигает Строки-4, он проверяет « Если 3> 5 », что ЛОЖЬ.Таким образом, он пропускает блок IF и переходит к блоку ELSEIF, здесь он проверяет « If 3 = 5 », который также оценивается как FALSE.

Теперь, поскольку два вышеупомянутых блока оцениваются как FALSE, будет выполнен блок ELSE и появится сообщение « 3 меньше 5 ». Позже управление программой переходит к строке 10 и завершает оператор IF.

Примеры оператора IF в VBA

Теперь перейдем к некоторым примерам оператора IF в VBA.

Пример 1: Использование оператора «меньше» с функцией IF VBA

Напишите программу для проверки, является ли число, введенное пользователем, отрицательным или нет.

Ниже код VBA может выполнить это:

 Sub Find_Negative () 
При ошибке GoTo catch_error
Dim number As Integer
number = InputBox ("Введите число:")
Если число <0, то
MsgBox "Введенное число отрицательное. ! "
Else
MsgBox «Введено положительное число!»
End If
Exit Sub
catch_error:
MsgBox «К сожалению, произошла ошибка!»
End Sub

Объяснение:

В этом коде мы, прежде всего, принимаем вводимые числа от пользователя.А затем мы проверяем, больше ли это число нуля. Если число меньше нуля, то выполняется блок IF и пользователю отображается сообщение: « Введенное число отрицательное! ».

Но, однако, если введенное число больше нуля, программа переходит к блоку Else, где отображает сообщение пользователю, говорящее: « Введенное число положительное! ».

Пример 2: Использование оператора «меньше» чем «=» с функцией IF VBA

Напишите код VBA, чтобы определить, является ли введенное пользователем число четным или нечетным.

Ниже приведен код для этого:

 Sub Find_Even_Odd () 
On Error GoTo catch_error
Dim number As Integer
number = InputBox ("Введите число:")
Если число Mod 2 = 0, то введено
MsgBox число четное! "
Else
MsgBox «Введено нечетное число!»
End If
Exit Sub
catch_error:
MsgBox «Произошла некоторая ошибка»
End Sub

Explanation:

В этом коде, как и в предыдущем примере, в первую очередь мы принимаем входные числа от пользователя.И затем мы проверяем, равен ли модуль этого числа с 2 нулю или нет. Если модуль равен нулю, это означает, что число делится на 2 и, следовательно, четно.

Но, однако, если результат модуля отличен от нуля, это означает, что число , а не , идеально делится на 2, и, следовательно, оно нечетное.

Пример 3: Использование других функций в функции IF VBA

Напишите программу для проверки того, является ли строка, введенная пользователем, палиндромом.

Строка палиндрома - это строка, которая читается так же вперед, как и назад, например level, civic и т. Д.

Ниже приведен код для выполнения этой задачи:

 Sub Check_Palindrome () 
On Error GoTo catch_error
Dim word As String
Dim Rev_Word As String
word = InputBox ("Enter the string")
Rev_Word = StrReverse (word)
Если LCase (word) = LCase (Rev_Word), то
MsgBox «Введенная строка - палиндром!»
Else
MsgBox «Введенная строка не является палиндромом!»
End If
Exit Sub
catch_error:
MsgBox «Произошла некоторая ошибка»
End Sub

Explanation:

Логика этого кода довольно проста, во-первых, мы попросили пользователя ввести текстовое сообщение.А затем, используя функцию VBA StrReverse (встроенная функция для переворота текстовой строки), мы изменили текстовую строку, введенную пользователем, на противоположную.

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

Использование оператора IF с операторами And & Or:

Логические операторы позволяют проверять несколько условий одновременно внутри одного оператора IF.В VBA есть много логических операторов, например: And , Or , Not , AndAlso , OrElse и Xor , но в большинстве случаев мы имеем дело только с первыми тремя.

Примечание: Все вышеупомянутые операторы являются двоичными (т.е. они принимают как минимум два операнда), кроме НЕ . НЕ унарный, потому что он принимает единственный операнд.

Теперь давайте посмотрим на их таблицы истинности:

9347

Условие НЕ Результат
Истина Ложь
Ложь Истина

вы можете ясно видеть, что Not просто возвращает противоположную логику условия.

Условие1 Условие2 Результат И Результат ИЛИ
Истина Истина Истина Истина
Ложь

9013 901 901 9013 Ложь Истина Ложь Истина
Ложь Ложь Ложь Ложь

Обратите внимание, что AND возвращает ИСТИНА, только если оба условия ИСТИННЫ.В то время как ИЛИ возвращает ИСТИНА, если хотя бы одно из двух условий ИСТИНА.

Теперь давайте рассмотрим несколько примеров логических операторов с оператором IF :

Пример 4: Использование логического оператора OR с оператором IF в VBA

Напишите программу, которая спрашивает пользователя, какой цвет ему нравится больше всего. Если цвет, введенный пользователем, - «Белый» или «Черный», выведите на экран сообщение о том, что вам нравится тот же цвет.

Ниже приведен код для этого:

 Sub Fav_Color () 
При ошибке GoTo catch_error
Тусклый цвет как строка
color = InputBox ("Введите свой любимый цвет:")
Если LCase (color) = "white" Или LCase (color) = "black" Тогда
MsgBox "Ой, правда! Мне тоже нравится то же самое.«
Else
MsgBox« Хороший выбор »
End If
Exit Sub
catch_error:
MsgBox« Произошла некоторая ошибка »
End Sub

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

Пример 5: Использование логического оператора AND с оператором IF в VBA

В приведенной ниже таблице у нас есть таблица оценок. Наша задача - написать программу, которая принимает оценки от пользователя и отображает соответствующую оценку.

код для этого:

 Sub Grade_Marks () 
On Error GoTo catch_error
Dim Marks As Integer
Marks = InputBox ("Введите свои оценки:")
Если Marks <= 100 And Marks> = 85, то
MsgBox "Оценка A "
ElseIf Marks <85 And Marks> = 75 Тогда
MsgBox" Grade B "
ElseIf Marks <75 And Marks> = 65 Тогда
MsgBox" Grade C "
ElseIf Marks <65 And Marks> = 55 Затем
MsgBox" Оценка D "
ElseIf Marks <55 And Marks> = 4 5 Затем
MsgBox «Grade E»
ElseIf Marks <45 Then
MsgBox «Fail»
End If
Exit Sub
catch_error:
MsgBox «Some Error Occurred»
End Sub

В этом коде посмотрите, как я использовал AND оператор для создания требуемых условий.

Примечание: В качестве лучшей практики кодирования всегда полезно использовать операторы Select Case вместо написания нескольких операторов ELSEIF (как мы видели в приведенном выше примере). Выберите операторы Case, чтобы они выполнялись быстрее и выглядели чище, чем IF THEN ELSE.

Рекомендуем к прочтению: Select Case Statement

Итак, это все о заявлении IF VBA. Прочтите этот пост, если эта длинная статья вам наскучила, и не забудьте поделиться с нами своими идеями и мыслями в разделе комментариев.

Рекомендуемая литература

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

В VBA Excel оператор IF Then Else позволяет проверить наличие условия и выполнить соответствующее действие.

Это чрезвычайно ценно во многих ситуациях, как мы увидим в примерах далее в этом руководстве.

В качестве простого примера предположим, что у вас есть список оценок в Excel, и вы хотите выделить всех учащихся, получивших оценку А.Теперь, если я попрошу вас сделать это вручную, вы проверите оценку каждого ученика, и если она пятерка, вы выделите ее, а если нет, то оставите как есть.

Та же самая логика может быть построена в VBA с помощью оператора If Then Else (и, конечно, делать гораздо больше, чем просто выделять оценки).

В этом руководстве я покажу вам различные способы использования конструкции «If Then Else» в Excel VBA и некоторые практические примеры в действии.

Но прежде чем я углублюсь в детали, позвольте мне дать вам синтаксис оператора IF Then Else.

Если вы хотите изучить VBA простым способом, ознакомьтесь с моим курсом Online Excel VBA Training .

Синтаксис - IF Then Else

Ниже приведен общий синтаксис конструкции If Then Else в VBA

 IF condition Then true_code [Else false_code] 

Or

 IF condition Then
true_code
Еще
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, то MsgBox "Pass"
End Sub 

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

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

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

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

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

 Sub CheckScore ()
Если Range ("A1").Значение> = 35 Тогда
MsgBox "Пропустить"
Еще
MsgBox "Fail"
Конец, если
End Sub 

В приведенном выше коде используются операторы IF и ELSE для выполнения двух разных условий. Когда оценка больше (или равна) 35, условие IF истинно, и выполняется код прямо под ним (все до оператора Else).

Но когда условие IF - FALSE, код переходит к части Else и выполняет в ней блок кода.

Обратите внимание, что когда мы используем одну строку оператора IF Then, нам не нужно использовать End IF.Но когда мы разбиваем его на несколько строк, нам нужно использовать оператор End If.

Вложенный оператор IF Then (несколько операторов IF Then)

До сих пор мы использовали один оператор IF Then.

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

  • Несколько условий IF
  • Оператор If Then Else
  • IF Then ElseIf Else конструкция

Позвольте мне показать вам, чем они отличаются и как использовать это в Excel VBA.

Несколько операторов IF Then

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

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

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

 Sub CheckScore ()
Если Range ("A1"). Value <35, то MsgBox "Fail"
Если Range ("A1"). Value> = 35, то MsgBox "Pass"
End Sub 

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

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

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

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

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

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

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

 Sub CheckScore ()
Если Диапазон ("A1"). Значение <35 Тогда
MsgBox "Fail"
Еще
Если Диапазон ("A1"). Значение <80 Тогда
MsgBox "Пропустить"
Еще
MsgBox «Пройдено, с отличием»
Конец, если
Конец, если
End Sub 

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

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

IF Then ElseIf Else Заявление

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

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

 Sub CheckScore ()
Если Диапазон ("A1"). Значение <35 Тогда
MsgBox "Fail"
ElseIf Range ("A1"). Значение <80 Тогда
MsgBox "Пропустить"
Еще
MsgBox «Пройдено, с отличием»
Конец, если
End Sub 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оба приведенных выше кода 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.Имя <> ActiveWorkbook.Name Then
wb.Save
wb.Close
Конец, если
Следующий wb
End Sub 

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

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

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

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

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

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

 Sub HighlightNegativeCells ()
Dim Cll As Range
Для каждого выбранного вызова
Если Cll.Value <0, то
Cll.Interior.Color = vbRed
Cll.Font.Color = vbWhite
Конец, если
Следующая Cll
End Sub 

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

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

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

 Sub HideAllExceptActiveSheet ()
Dim ws как рабочий лист
Для каждого ws в ThisWorkbook.Рабочие листы
Если ws.Name <> ActiveSheet.Name Тогда ws.Visible = xlSheetHidden
Следующий ws
End Sub 

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

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

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

 Функция GetNumeric (CellRef As String )
Dim StringLength As Integer
StringLength = Len (CellRef)
Для i = 1 до StringLength
Если IsNumeric (Mid (CellRef, i, 1)), то Result = Result & Mid (CellRef, i, 1)
Далее я
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. Скопируйте и вставьте код в окно модуля.

Вам также могут понравиться следующие руководства по Excel:

VBA IF (IF Then Else Statement)

Домашняя страница ➜ Учебное пособие по VBA ➜ VBA IF - IF Then Else Statement

Если вы хотите стать продвинутым VBA пользователь, то оператор IF должен изучить.И я считаю, что вы уже знакомы со словом ЕСЛИ и часто используете его в качестве функции рабочего листа.

В VBA IF работает точно так же. Его основная идея - выполнить задачу, когда условие ИСТИНА, иначе ничего не делать или делать что-то еще. Вы можете писать как простые, так и сложные условия.

Для понимания я разделил его на три разные части.

  • Условие для проверки.
  • Задача, которую нужно выполнить, если условие - ИСТИНА.
  • Задача, которую нужно выполнить, если условие - ЛОЖЬ.

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

В приведенном выше примере дождь является условием. Если это условие ИСТИНА, мальчик откроет свой зонтик, а если условие ЛОЖНО, он наденет свою шляпу. Условия повсюду в нашей повседневной жизни. Но теперь давайте вернемся к нашему миру программирования и исследуем его.

Синтаксис: VBA IF

У нас есть три разных типа операторов IF в VBA.

1.IF-Then

IF THEN - это простейшая форма оператора IF. Все, что нам нужно сделать, это указать условие для проверки, и если это условие ИСТИННО, он выполнит задачу. Но если это условие - ЛОЖЬ, он ничего не сделает и мгновенно пропустит строку.

Синтаксис
  IF condition Then оператор [ы]  

В приведенном выше синтаксисе мы должны указать условие для оценки и задачу, которую нужно выполнить, если это условие ИСТИНА.

Пример

В приведенном выше примере мы использовали проверку того, что ячейка A1 имеет значение 10, и если это так, оператор покажет окно сообщения с сообщением «Ячейка A1 имеет значение 10».

  Sub CheckValue ()
Если Range ("A1"). Value = 10, то
MsgBox («Ячейка A1 имеет значение 10»)
End Sub  

2. IF-Then-Else

Вы можете использовать оператор IF-Then-Else, где вы хотите выполнить определенную задачу, если условие ИСТИНА, и другую задачу, если условие ЛОЖЬ.

Синтаксис
  IF Condition Then
Заявления]
Еще
Заявления]
End If  

Используя приведенный выше синтаксис, мы можем выполнять различные задачи в зависимости от результата условия.Если условие ИСТИНА, то он выполнит оператор, который вы упомянули после «Тогда», или если условие ЛОЖЬ, он выполнит оператор, который вы упомянули после «Иначе».

Пример
  Sub CheckValue ()
 Если Range ("A1"). Value = "10", то
     MsgBox («Ячейка A1 имеет значение 10»)
 Еще
     MsgBox («Ячейка A1 имеет значение, отличное от 10»)
 End Sub  

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

Если ячейка A1 имеет значение 10, вы получите окно сообщения, показывающее «Ячейка A1 имеет значение 10», а если есть какое-либо другое значение в ячейке A1, вы получите окно сообщения, показывающее «Ячейка A1 имеет значение, отличное от 10». Итак, здесь мы можем выполнять разные задачи в зависимости от результата условия.

3. IF-Then-Elseif-Else

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

Синтаксис
  IF Condition Then
Заявления]
Elseif Condition Then
Заявления]
Еще
Заявления]
End If  

В синтаксисе выше мы имеем:

  1. Условие для оценки.
  2. Оператор, выполняемый, если это условие TURE.
  3. Если это условие - ЛОЖЬ, то нам нужно оценить второе условие.
  4. И, если это второе условие ИСТИНА, у нас есть оператор, который нужно выполнить.
  5. Но, если оба условия, первое и второе - ЛОЖЬ, тогда он выполнит оператор, который вы упомянули после «Иначе».

И, что самое приятное, вы можете использовать любое количество «Elseif» в своем коде. Это означает, что вы можете указать любое количество условий в своем заявлении.

Пример
  Sub check_grade ()
 Если Range ("A2"). Value = "A", то
     MsgBox "Очень хорошо"
 Еще
 Если Range ("A2"). Value = "B", то
     MsgBox "Хорошо"
 ElseIf Range ("A2"). Value = "C" Тогда
     MsgBox "Средний"
 ElseIf Range ("A2"). Value = "D" Тогда
     MsgBox "Плохо"
 ElseIf Range ("A2"). Value = "E" Тогда
     MsgBox "Очень плохо"
 Еще
     MsgBox «Введите правильную оценку»
 End Sub  

В приведенном выше примере мы написали макрос, который сначала проверяет ячейку A2 на значение «A», и если ячейка имеет оценку «A», оператор вернет сообщение «Очень хорошо».

Этот оператор сначала проверяет ячейку A2 на наличие значения «A», и если ячейка имеет оценку «A», оператор вернет сообщение «Очень хорошо».

И, если первое условие - ЛОЖЬ, тогда оно оценит второе условие и вернет сообщение «Хорошо», если ячейка имеет оценку «В».

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

Секрет написания оператора IF в VBA

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

Однострочный оператор IF по сравнению с Блокировать оператор IF

Операторы IF можно написать двумя разными способами, и у обоих есть свои преимущества и недостатки. Взглянуть.

1. Однострочный оператор

Однострочный оператор идеально подходит, если вы используете оператор IF-Then.Основное использование однострочного оператора - это написать весь код в одной строке.

  Если A1 = 10, то Msgbox («Ячейка A1 имеет значение 10»)  

В приведенном выше утверждении мы написали оператор IF, чтобы оценить, имеет ли ячейка A1 значение 10, тогда будет отображаться окно сообщения. Лучше всего использовать однострочный оператор, когда вам нужно написать простой код. Трудно понять использование однострочного кода для сложных и длинных операторов.

Совет: При написании однострочного кода не нужно использовать Endif для завершения оператора.

2. Заявление блока

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

  Sub check_value ()
 Если диапазон («A1»). Значение = «10», тогда
     MsgBox («Ячейка A1 имеет значение 10»)
 Еще
     MsgBox («Ячейка A1 имеет значение, отличное от 10»)
 Конец, если
 End Sub  

В приведенном выше примере мы записали оператор IF-Then-Else блоками.И вы можете видеть, что его легко читать и даже легко отлаживать.

Когда вы будете писать сложные операторы (что вы обязательно сделаете после прочтения этого руководства), всегда хорошо использовать блочные операторы. И при написании вложенных операторов If вы также можете добавить отступ в своей строке для большей ясности.

Quick Tip - У вас есть исключение, которое вы можете пропустить, используя Else в конце вашего кода, когда вы используете IF-Then-Elseif-Else. Это очень полезно, когда вам не нужно выполнять какую-либо задачу, когда ни одно из условий в вашем операторе не является ИСТИННЫМ.

8 примеров из реальной жизни

Здесь я привел несколько простых, но полезных примеров, которым вы можете следовать.

1. Вложенный IF

Лучшая часть оператора IF - это создание операторов вложенности. Вы можете добавить второе условие к первому условию.

  Sub NestIF ()
 Dim res As Long
 res = MsgBox («Вы хотите сохранить этот файл?», vbYesNo, «Сохранить файл»)
 Если res = vbYes Then 'начало первого оператора IF
     Если ActiveWorkbook.Saved <> True Then 'начало второго оператора IF.ActiveWorkbook.SaveMsgBox («Книга сохранена»)
     Еще
         MsgBox "Эта книга уже сохранена"
     End If 'конец второго оператора IF
 Еще
     MsgBox "Не забудьте сохранить его позже"
 End If 'конец первого оператора IF
 End Sub  

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

Сначала он оценит ту кнопку, которую вы нажали.Если вы нажали «Да», то вложение будет оценивать, сохранен ли ваш рабочий лист или нет.

Если ваша книга не сохранена, она сохранится, и вы получите сообщение. И, если книга уже сохранена, появится сообщение об этом.

Но, если вы не нажмете кнопку «Нет», условие первого макроса будет ЛОЖНО, и вы получите только сообщение, чтобы сохранить вашу книгу позже.

Основная идея в этом коде состоит в том, что второе условие полностью зависит от первого условия, если первое условие - ЛОЖЬ, то второе условие не будет оцениваться.

Подробнее о Nested IF

2. Создание цикла с IF и GoTo

Вы также можете создать цикл, используя goto с IF. Большинство программистов избегают написания циклов таким образом, поскольку у нас есть лучшие способы для цикла. Но нет ничего плохого в том, чтобы узнать, как мы можем это сделать.

  Sub auto_open ()
 Предупреждение: если InputBox ("Введите имя пользователя") <> "Puneet", то
 GoTo Alert
 Еще
 MsgBox "Добро пожаловать"
 Конец, если
End Sub  

В приведенном выше примере мы использовали оператор условия для создания цикла.Мы использовали auto_open в качестве имени макроса, чтобы всякий раз, когда кто-либо открывал файл, он запускал этот макрос.

Пользователь должен ввести имя пользователя, и если это имя пользователя не равно «Puneet», он повторит код и снова покажет поле ввода. И, если вы введете правильный текст, он / она сможет получить доступ к файлу.

3. Проверка, содержит ли ячейка число

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

  Дополнительный контрольный_номер ()
 Если IsNumeric (Range ("B2").Значение) Тогда
     MsgBox "Да, в активной ячейке есть номер".
 Еще
     MsgBox "Нет, в активной ячейке нет номера".
 Конец, если
 End Sub  

В приведенном выше примере я написал условие, используя функцию isnumeric в VBA, которая аналогична функции isnumber рабочего листа, чтобы проверить, является ли значение в ячейке числом или нет.

Если значение является числом, оно вернет ИСТИНА, и вы получите сообщение «Да, активная ячейка имеет числовое значение». И, если значение не является числом, вы получите сообщение «Нет числового значения в активной ячейке».

4. Использование OR и AND с IF

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

  Дополнительное использование ИЛИ ()
 Если диапазон ("A1") <70 или диапазон ("B1") <70, то
     MsgBox "Вы прошли"
 Еще
     Если диапазон ("A1") <40 и диапазон ("B1") <40, то
         MsgBox "Вы прошли"
     Еще
         MsgBox «Вы не справились»
     Конец, если
 Конец, если
 End Sub  

В приведенном выше примере в строке 2 у нас есть два условия, использующие OR.Если ученик наберет 70 баллов по любому из предметов, результатом будет «Успешно». А в строке 7 у нас есть два условия с использованием оператора AND. Если учащийся наберет более 40 баллов по обоим предметам, результатом будет «Успешно».

Используя IF AND , вы можете указать более одного условия и выполнить задачу, если все условия ИСТИНА.

5. Использование Not With IF

Используя NOT в условии, вы можете изменить TRUE на FALSE и FALSE на TRUE.

VBA IF Not ()

  Sub IF_Not ()
     Если диапазон («D1») <= 40 и не диапазон («E1») = «E», то
         MsgBox "Вы прошли."
     Еще
         MsgBox «Вы - неудачник».
     Конец, если
 End Sub  

В приведенном выше примере мы использовали NOT в условии. У нас есть две ячейки с предметной оценкой. В одной ячейке количество очков, а в другой - оценки.

  • Если ученик имеет отметки выше 40 по первому предмету и выше E по второму предмету, то он / она имеет ПРОПУСК.
  • Если ученик имеет оценки выше 40 по первому предмету и выше E по второму предмету, то он / она ПРОДОЛЖАЕТ.

Таким образом, каждый раз, когда учащийся набирает более 40 баллов, а оценка отличается от Е, мы будем получать сообщение «Вы сданы» или «Вы не сдавали экзамен».

6. Оператор IF с флажком

Теперь мы используем флажок для запуска макроса.

  Sub ship_as_bill ()
 Если Range ("D15") = True, то
     Диапазон ("D17: D21") = Диапазон ("C17: C21")
 Еще
     Если Range («D15») = False, то
         Диапазон ("D17: D21"). ClearContents
     Еще
         MsgBox («Ошибка!»)
     Конец, если
 Конец, если
 End Sub  

В приведенном выше примере мы использовали оператор IF для создания условия, при котором, если флажок установлен, тогда диапазон D17: D21 равен диапазону C17: C21.И, если флажок не установлен, диапазон D17: D21 будет пустым.

Используя эту технику, мы можем использовать адрес выставления счета в качестве адреса доставки, а если нам нужно что-то еще, мы можем ввести адрес вручную.

7. Проверьте, объединена ли ячейка

И здесь мы пишем условие для получения предупреждения, если активная ячейка объединена.

  Sub MergeCellCheck ()
Если ActiveCell.MergeCells То
MsgBox «Активная ячейка объединена»
Еще
MsgBox «Активная ячейка не объединена»
Конец, если
End Sub  

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

8. Удалите всю строку, если ячейка пуста

Здесь мы используем IF, чтобы проверить, пуста ли строка или нет. И, если эта строка пуста, оператор удалит эту конкретную строку.

  Sub DeleteRow ()
Если Application.CountA (ActiveCell.EntireRow) = 0, то
 ActiveCell.EntireRow.Delete
Еще
 MsgBox Application.CountA (ActiveCell.EntireRow) & «Ячейки содержат значения в этой строке»
Конец, если
End Sub  

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

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2021 © Все права защищены. Карта сайта