Значение цифры зависит от ее. Малый математический факультет
Основные управляющие структуры VBA:
Управляющая инструкция If Then Else "End If
Эта инструкция изменяет порядок выполнения инструкций в зависимости
от результатов проверки заданного условия (или набора условий)
Пример:
Sub TestIfThen()
iData = "pashulka"
If iData = "Excel" Then
MsgBox "Этого сообщения Вы не увидите никогда!!!"
ElseIf iData = "Office" Then
MsgBox "К сожалению, этого сообщения Вы тоже не увидите!!!"
Else
MsgBox "Это сообщение появится в любом случае",iData
End If
Комментарии:
If
- ключевое слово, означающее начало проверки
iData
- переменная, значение которой будет проверяться
Then
- ключевое слово, означающее конец проверки
MsgBox
- сообщение
ElseIf
- ключевое слово, означающее начало новой проверки
Then
- ключевое слово, означающее конец дополнительной проверки
MsgBox
- сообщение
Else
- ключевое слово, означающее конец блока инструкций,
выполняемых при положительном результате проверки, и начало блока инструкций,
выполняемых при отрицательном результате.
MsgBox
- сообщение
End If
В инструкции If Then Else "End If ключевые слова ElseIf и Else являются необязательными.
Управляющая инструкция For Next
Эта инструкция позволяет выполнять определённые действия нужное
количество раз. Такие инструкции, как правило, называют циклами.
Пример:
Sub TestForNext()
For iCount = 1 To 100 Step 2
i = i + 1
Next
Комментарии:
For
iCount
- переменная, определяющая число повторений цикла.
1
- начальное значение счётчика
To
- ключевое слово, разделяющее начальное и конечное значение счётчика
100
- конечное значение счётчика
Step
- ключевое слово, определяющее шаг счётчика
2
- шаг счётчика (число)
Next
- ключевое слово, при достижении которого значение счётчика
изменяется на величину шага, после чего управление опять переходит в начало
цикла.
MsgBox
В инструкции For Next ключевое слово Step является необязательным. При его отсутствии, шаг выполнения счётчика будет равен 1.
важно Шаг счётчика обязательно должен быть числом. Если шаг счётчика указан в виде отрицательного числа, то тогда значение счётчика будет с каждым циклом будет уменьшаться.
Пример, с обратным отсчётом:
Sub TestForNext2()
For iCount = 300 To 1 Step -3
i = i + 1
If iCount = 153 Then Exit For
Next iCount
MsgBox "Число повторений: " & i
Обратите внимание на:
If
iCount = 153 Then
- в этом VBA коде мы применили уже
известную нам инструкцию If Then Else
Exit For
Next iCount
- в коде присутствует переменная (счётчик), который
располагается после ключевого слова. Подобный синтаксис используется, как
правило, для визуального определения конца цикла, если в VBA коде присутствует
достаточно много подобных инструкций.
Управляющая инструкция While Wend
Эта инструкция позволяет выполнять определённые действия до тех пор,
пока соблюдается заданное условие.
Пример:
Sub TestWhileWend()
While iCount iCount = iCount + 1
Wend
Комментарии:
While
- ключевое слово, означающее начало цикла
iCount - условие, при соблюдении которого будет выполняться эта
инструкция
Wend
MsgBox
- сообщение о количестве повторений
Управляющая инструкция Do Loop
Эта инструкция позволяет выполнять определённые действия не только до
тех пор, пока соблюдается заданное условие, но и наиборот, пока не будет
выполнено заданное условие.
Пример:
Sub TestDoLoop()
Do Until iCount >= 100
iCount = iCount + 1
Loop
MsgBox "Число повторений: " & iCount
Комментарии:
Do
- ключевое слово, означающее начало цикла
Until
- ключевое слово, означающее наличие условия
iCount >= 100
- условие, при соблюдении которого будет выполняться эта
инструкция
Loop
- ключевое слово, означающее конец цикла
MsgBox
- сообщение о количестве повторений
Sub TestDoLoop2()
Do
iCount = iCount + 1
If iCount = 50 Then Exit Do
Loop Until iCount = 100
MsgBox "Число повторений: " & iCount
Обратите внимание на:
If
iCount = 50 Then
- в этом VBA коде мы опять применили
уже известную нам инструкцию If Then Else
Exit Do
- инструкция означающая досрочный выход из цикла
iCount = 100
- условие, при соблюдении которого будет
выполняться эта инструкция
Примечание:
Условие заданное в конце цикла гарантирует, что он будет выполнен хотя
бы один раз. Будьте осторожны с инструкциями While Wend, Do Loop, так как
при некорректном задании условия, Вы можете получить практически perpetuum
mobile.
Управляющая инструкция Select Case "End Select
Эта инструкция в зависимости от результатов значения переменной или выражения
выполняет один из нескольких фрагментов кода.
Пример:
Sub TestSelectCase()
Select Case iNumeric
Case 1
Case 2, 5
MsgBox "Это сообщение Вы не должны увидеть"
Case 10 To 13
MsgBox "Это сообщение Вы не должны увидеть"
Case Is > 14
MsgBox "Именно это сообщение Вы и должны увидеть"
Case Else
MsgBox "Это сообщение появится, если переменная будет End Select
Комментарии:
Select Case
iNumeric
- переменная или выражение, значение которой определяет
выбор фрагмента VBA кода для выполнения
Case 1
- первый вариант значения для сравнения.
Если значение переменной совпадёт с ним, то будет выполнен фрагмент кода
следующий за Case, но до следующего ключевого Case, затем инструкция завершит
свою работу. В противном случае проверка продолжится.
Case 2, 5
- второй вариант значения.
Case 10 To 13
- третий вариант значения.
Case Is > 14
- четвёртый вариант значения.
MsgBox
- сообщение, которое будет выведено в данном случае
Case Else
- ключевые слова, означающее выполнение кода, если ни одно
из предыдущих вариантов не совпало.
End Select
- ключевое слово, означающее конец инструкции
В инструкции Select Case "End Select ключевое слово Case Else является необязательным.
Управляющая инструкция For Each Next
Эта инструкция позволяет выполнять определённые действия с каждым
об"ектом семейства или элементом массива.
Пример с об"ектом Range:
Sub TestForEachNextRange()
i = i + 1
iCell.Value = "Ячейка # " & i
Next
MsgBox "Число ячеек: " & i
Комментарии:
For Each
- ключевые слова, означающее начало инструкции
iCell
- переменная, которой присваиваются значения элементов
группы (массива или семейства) Для работы с элементами массива переменная
должна принадлежать к типу Variant.
In
- ключевое слово, отделяющее переменную от группы
Range("A1:C5")
- группа, т.е. массив или семейство об"ектов.
Количество повторений цикла зависит от числа элементов, входящих в группу.
При первом выполнении цикла переменной присваивается значение самого первого
элемента группы, а затем, всех последующих.
Next
- ключевое слово, при достижении которого управление опять
переходит в начало цикла.
MsgBox
- сообщение о количестве элементов группы.
В данном случае использовать подобный подсчёт числа ячеек в об"екте Range является не лучшим способом, так как у этого об"екта существует свойство, которое справится с этой задачей гораздо лучше: Об"ект Range: его свойства и методы
Пример манипуляции с об"ектом Range:
Sub TestForEachNextRangeChanges()
For Each iCell In Range("A1:C5")
i = i + 1: iCell.Value = i
If iCell.Value 5 Then
iCell.Font.Size = 15
iCell.Interior.ColorIndex = 50
ElseIf iCell.Value = 13 Or iCell.Value = 5 Then
iCell.Font.Size = 20
iCell.Interior.ColorIndex = 3
Else
iCell.Clear
End If
Обратите внимание на:
- в этом VBA коде для проверки значений находящихся в ячейке мы
применили уже известную нам инструкцию If Then Else.
- в зависимости от того какое условие прошло проверку, выполняется
определённый фрагмент кода, который использует различные свойства
об"екта Range.
Пример с семейством WorkSheets:
Sub TestForEachNextSheet()
For Each iList In Worksheets
i = i + 1
iNameList = iNameList & Chr(10) & iList.Name
Next
MsgBox "Число рабочих листов: " & i & Chr(10) & _
"Имена рабочих листов: " & iNameList
В данном случае использовать подобный подсчёт числа рабочих листов является не лучшим способом, так как у этого об"екта также существует свойство, которое справится с этой задачей гораздо лучше.
Управляющие структуры позволяют управлять последовательностью выполнения программы. Без операторов управления все операторы программы будут выполняться слева направо и сверху вниз. Однако иногда требуется многократно выполнять некоторый набор инструкций автоматически, либо решить задачу по-другому в зависимости от значения переменных или параметров, заданных пользователем во время выполнения. Для этого служат конструкции управления и циклы.
VBA поддерживает следующие конструкции принятия решений:
If . . . Then . . . Else
6.1 Конструкция If . . . Then
Конструкция If . . . Then применяется, когда необходимо выполнить один или группу операторов в зависимости от некоторого условия. Синтаксис этой конструкции позволяет задавать ее в одной строке или в нескольких строках программы:
If условие Then выражение If условие Then выражение End If
Обычно условие является простым сравнением, но оно может быть любым выражением с вычисляемым значением. Это значение интерпретируется как False (Ложь), если оно нулевое, а любое ненулевое рассматривается как True (Истина). Если условие истинно, то выполняются все выражения, стоящие после ключевого слова Then. Для условного выполнения одного оператора можно использовать как синтаксис для одной строки, так и синтаксис для нескольких строк (блоковую конструкцию).
Следующие два оператора эквивалентны:
If anyDate < Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If
Заметим, что синтаксис оператора If . . . Then для одной строки не использует оператор End If. Чтобы выполнить последовательность операторов, если условие истинно, следует использовать блоковую конструкцию If . . . Then . . . End If.
If anyDate < Now Then anyDate = Now Timer.Enabled = False " Запретить таймер. End If
Если условие ложно, то операторы после ключевого слова Then не выполняется, а управление передается на следующую строку (или строку после оператора End If в блочной конструкции).
6.2 Конструкция If . . . Then . . . Else
определяет несколько блоков операторов, один из которых будет выполняться в зависимости от условия:
If условие1 Then выражение1 ElseIf условие2 Then выражение2 . . . Else выражение-n End If
При выполнении сначала проверяется условие1. Если оно ложно, VBA проверяет следующее условие2 и т. д., пока не найдет истинного условия. Найдя его, VBA выполняет соответствующий блок операторов и затем передает управление инструкции, следующей за оператором End if. В данную конструкцию можно включить блок оператора Else, который VBA выполняет, если не выполнено ни одно из условий.
Конструкция If . . . Then . . . ElseIf в действительности всего лишь специальный случай конструкции If . . . Then . . . Else. Заметим, что в данной конструкции может быть любое число блоков ElseIf, или даже ни одного. Блок Else можно включать независимо от присутствия или, наоборот, отсутствия блоков ElseIf.
Sub пример1() Dim a As Single, b As Single, x As Single Dim z As Double Call read("A1", a) Call read("B1", b) Let x = CSng(InputBox("введи x", "Ввод данных", 0)) If x <= a Then z = Sin(x) ElseIf x >= b Then z = Tan(x) Else: z = Cos(x) End If Call out("C1", z) End Sub
Заметим, что можно добавить любое число блоков Elself в конструкцию If . . . Then. Однако количество блоков Elself может стать настолько большим, что конструкция If . . . Then станет очень громоздкой и неудобной. В подобной ситуации следует применять другую конструкцию принятия решения - Select Case.
6.3 Конструкция Select Case
Конструкция Select Case является альтернативой конструкции If . . . Then . . . Else в случае выполнения блока, состоящего из большого набора операторов. Конструкция Select Case предоставляет возможность, похожую на возможность конструкции If . . . Then . . . Else, но в отличие от нее она делает код более читаемым при наличии нескольких вариантов выбора.
Конструкция Select Case работает с единственным проверяемым выражением, которое вычисляется один раз при входе в эту конструкцию. Затем VBA сравнивает полученный результат со значениями, задаваемыми в операторах Case конструкции. Если найдено совпадение, выполняется блок операторов, ассоциированный с оператором Case:
Select Case проверяемое_выражение ] ] . . . ] End Select
Каждый список выражений является списком из одного или более значений. Если в одном списке больше одного значения, они отделяются запятыми. Каждый блок операторов содержит несколько операторов или ни одного. Если окажется, что вычисленному значению проверяемого выражения соответствуют значения из нескольких операторов Case, то выполняется блок операторов, ассоциированный с первым оператором Case из всех найденных соответствий. VBA выполняет блок операторов, ассоциированный с оператором Case Else (заметим, что он необязателен), если не найдено ни одного соответствия проверяемого значения выражения и значений из всех списков операторов Case.
Рассмотрим пример вычисления функции
Sub пример2() Const pi2 = 1.57 Dim x As Single Dim z As Double Let x = CSng(InputBox("введи x", "Ввод данных", 0)) Select Case x Case -pi2 z = Sin(x) Case 0 z = Cos(x) Case pi2 z = Tan(x) Case Else MsgBox "Неверные исходные данные!" Exit Sub End Select Call out("D1", z) End Sub
Заметим, что конструкция Select Case вычисляет выражение только один раз при входе в нее, а в конструкции If . . . Then . . . Else вычисляются различные выражения для каждого оператора Elself. Конструкцию If . . . Then . . . Else можно заменить конструкцией Select Case, только если оператор If и каждый оператор Elself вычисляют одно и то же выражение.
And in today’s post we will discuss about VBA select case statement. VBA Select Case can be used instead of complex Excel Nested If statements. This makes the VBA code faster to execute and easier to understand.
Select-Case statement (also called as Switch Case in some languages) checks a variable or an expression for different cases (values). If anyone of the case becomes true then only that case is executed and the program ignores all other cases.
If you remember in our last post we talked about, “how you can ”.
Syntax of VBA Select Case Statement:
The Syntax is as under:
Select Case Condition
Case value_1
Code to Execute When Condition
= value_1
Case value_2
Code to Execute When Condition
= value_2
Case value_3
Code to Execute When Condition
= value_3
Case Else
Code to Execute When all the other cases are False
End Select
Here, ‘Condition ’ refers to the variable or the expression that is to be tested and based on which anyone of the code segments will be executed.
‘value_1 ’, ‘value_2 ’ and ‘value_3 ’ are the possible outcomes of the ‘Condition’. Whenever anyone of these values matches the ‘Condition’ then its corresponding Case block will execute.
‘Else’ is a kind of default case value, which will only execute when all the above Case statements result into False. ‘Else’ case is optional but generally it is considered a good practice to use it.
Examples of Select-Case in VBA:
Now let’s move on to some practical examples of case Statements.
Example 1: Select Case Statement with an Expression.
In the below example, we have supplied a condition (i.e. a=b) to the Select Case statement. If this is True then ‘Case True’ block will be executed and if it is False then ‘Case False’ block will execute.
Sub Select_Case_Example() "Enter the value for variables a = InputBox("Enter the value for A:") b = InputBox("Enter the value for B:") " Evaluating the expression Select Case a = b Case True MsgBox "The expression is TRUE" Case False MsgBox "The expressions is FALSE" End Select End SubNote: In this code is used for getting values from user.
Example 2: Case statement to check Text Strings
In this example we will compare text strings in the Case statements. If a match is found then the corresponding case block will execute otherwise the ‘Case Else’ block will execute.
Sub Select_Case_Example() "Enter the value for variables fruit_name = InputBox("Enter the fruit name:") " Evaluating the expression Select Case fruit_name Case "Apple" MsgBox "You entered Apple" Case "Mango" MsgBox "You entered Mango" Case "Orange" MsgBox "You entered Orange" Case Else MsgBox "I didn"t knew this fruit!" End Select End Sub
Example 3: Case statement to check numbers
In the below example we will check if the number entered by user is less than or greater than 5.
Sub Select_Case_Example() "Enter the value for variables Num = InputBox("Enter any Number between 1 to 10:") " Evaluating the expression Select Case Num Case Is < 5 MsgBox "Your Number is less than 5" Case Is = 5 MsgBox "Your Number is Equal to 5" Case Is > 5 MsgBox "Your Number is greater than 5" End Select End Sub
Note: You can use IS keyword with Case Statement to compare values.
Example 4: Select Case statement to check multiple conditions inside a single case.
In this example we will ask the user to enter any number from 1-10. And then we will check if the number is even or odd by using multiple conditions in the case statement. Notice here I have used a “,” (comma) to compare multiple conditions in a single case.
Sub Select_Case_Example() "Enter the value for variables Num = InputBox("Enter any Number between 1 to 10:") " Evaluating the expression Select Case Num Case 2, 4, 6, 8, 10 MsgBox "Your Number is Even." Case 1, 3, 5, 7, 9 MsgBox "Your Number is Odd." Case Else MsgBox "Your Number is out of the range." End Select End Sub
Note: I know that there are easier methods to check if a number is even or odd, but I have used this example only for explaining how you can check multiple conditions inside a single case statement.
Example 5: Case statement to check a continuous range as condition.
Here we will test a continuous range as a condition. We will ask the user to enter any number between 1-10, if the number is between 1 to 5 (including both 1 and 5) then ‘Case 1 To 5’ will be ‘True’, if the number entered by the user is between 6 and 10 (including both 6 and 10) then ‘Case 6 To 10’ will be ‘True’, if both the previous cases are ‘False’ then ‘Case Else’ will be executed.
Sub Select_Case_Example() "Enter the value for variables Num = InputBox("Enter any Number between 1 to 10:") " Evaluating the expression Select Case Num Case 1 To 5 MsgBox "Your Number between 1 to 5" Case 6 To 10 MsgBox "Your Number between 6 to 10" Case Else MsgBox "Your Number is out of the range." End Select End Sub
So, this was all about VBA Select Case Statement. Feel free to share your thoughts about this topic.
About Ankit Kaul
Ankit is the founder of Excel Trick. He is tech Geek who loves to sit in front of his square headed girlfriend (his PC) all day long. :D. Ankit has a strong passion for learning Microsoft Excel. His only aim is to turn you guys into "Excel Geeks".
VBAимеет условный оператор перехода для использования в случаях, когда необходимо выбирать из большого количества различных ветвей кода: операторSelect Case (с его помощью очень удобно реализовывать структуру множественного выбора).Он работает во многом так же, как множество независимых операторовIf ,но он более понятен для того, кто пишет код, и того, кто читает этот код. Этот оператор более эффективен, чем операторIf … Then … Else .
Ключевые слова Select Case используются со многими операторамиCase ,где каждый операторCase проверяет появление другого условия и выполняется только одна из ветвейCase .ВетвьCase может содержать один, несколько или ни одного оператораVBA.
Select Case – управляющий оператор, выполняющий один из нескольких блоков операторов в зависимости от значения выражения.
Select Case Выражение_выбора
[ Case Список_выражений_1
[Блок_операторов_1]
[Case Список_выражений_2 ]
[Блок_операторов_2]]
……………………………………………………………………………
[Case E lse
[Блок_операторов_N]]
E nd S elect
– Выражение_выбора – любое числовое или символьное выражение;
– Список_выражений – каждый из списков представляет собой список логических выражений, отделенных запятыми; имеют тот же тип, что и выражение_выбора;
– Блок_операторов – содержит любое количество операторов VBA.
При выполнении оператора Select Case VBA сначала оценивает Выражение_выбора, а затем сравнивает результат этого выражения с каждым выражением, перечисленным в каждом Списке_выражений. Если значение, представленное с помощью Выражение_выбора совпадает с выражением в Списке_выражений для одного из Case ,VBA выполняет Блок_операторов для этого предложения Case .Если значение Выражение_выбора совпадает более, чем с одним оператором Case ,VBA выполняет только операторы в первом совпадающем предложении Case .Часто Выражение_выбора – это просто имя одной переменной, математическое или численное, а не логическое выражение. Выражения в Списке_выражений – это обычно логические выражения.
После завершения выполнения операторов в первом совпадающем операторе Case VBA продолжает выполнение кода с первого оператора после ключевых слов End Select ,которые обозначают конец Select Case .
Если значение Выражение_выбора не совпадает ни с каким из Case ,а необязательный Case Else присутствует, VBA выполняет операторы, представленные с помощью Блок_операторов_N перед переходом к оператору после Select Case . Блок операторов Case E lse выполняется только в том случае, если Выражения_выбора не удовлетворяет ни одному из условий Case . Обычно используется для обработки нежелательных значений. Действие оператора Select Case поясняется блок-схемой, приведенной на рис. 5.
Рис 5. Блок-схема конструкции Select Case
Элементы Списка _ выражений должны иметь одну из следующих трех форм:
Выражение_1,Выражение_2, …, Выражение_N
Выражение Т o Выражение
I s Выражение с операцией
– Выражение_ – любое числовое, символьное или логическое выражение того же типа, что и выражение выбора;
– Выражение с операцией – выражение, содержащее любую из следующих операций: <, <=, >, >=, < >, =.
Если используется ключевое слово Тo для определения пределов выражения, то меньшее значение должно быть первым. Например, операторы блока Case -1 To -5 не выполняются, если Выражение _ выбора равно -4. Эта строка должна быть написана как Case -5 To -1 .
Операции сравнения можно использовать только с ключевым словом Is , за исключением операции равенства. При отсутствии ключа Is в нужном месте интеллектуальный редактор вставит его.
Можно использовать несколько выражений или пределов в каждом условии Case . Например, Case 1 TO 4, 7 TO 9, 11, 13, Is > n % .
Пример 4. Программа, рассчитывающая скидку в зависимости от суммы покупки.
Sub skidka()
" Определение скидки (в %) в зависимости от
" количества продаваемого товара
Dim skidka As Integer
Dim summa As Single
summa = InputBox ("Введите сумму покупки", "Расчет скидки", 0)
If summa > 0 Then
Select Case summa
Case Is > 1000
Case Is > 500
Case Else
End Select
MsgBox "Скидка" & skidka & "%"
MsgBox "Сумма покупки не указана"