Условные операторы позволяют выполнять различные действия в зависимости от того, выполняется ли определенное условие (условия). Это ключевой элемент управления потоком выполнения вашего кода.
В VBA есть два основных типа условных операторов:
1. **If...Then...Else** 2. **Select Case**
Рассмотрим каждый из них подробнее:
### 1. Оператор If...Then...Else
Это наиболее распространенный условный оператор. Он позволяет проверить одно или несколько условий и выполнить соответствующий блок кода.
**Синтаксис:**
```vba If условие1 Then ' Код, выполняемый, если условие1 истинно [ElseIf условие2 Then] ' Код, выполняемый, если условие2 истинно [Else] ' Код, выполняемый, если ни одно из условий не истинно End If ```
**Пояснения:**
* `условие1`, `условие2` ... : Это логические выражения, которые оцениваются как `True` (истина) или `False` (ложь). * `Then`: Ключевое слово, указывающее, что дальше идет блок кода, который нужно выполнить, если условие истинно. * `ElseIf`: Необязательная часть. Позволяет проверить дополнительное условие, если предыдущее условие ложно. Таких `ElseIf` может быть несколько. * `Else`: Необязательная часть. Блок кода после `Else` выполняется, если все предыдущие условия оказались ложными. * `End If`: Обязательно завершает конструкцию `If...Then...Else`.
**Примеры:**
* **Простой If:**
```vba Sub SimpleIf() Dim age As Integer age = 20
If age >= 18 Then Debug.Print "Совершеннолетний" End If End Sub ``` * **If...Then...Else:**
```vba Sub IfThenElse() Dim score As Integer score = 75
If score >= 90 Then Debug.Print "Отлично" ElseIf score >= 70 Then Debug.Print "Хорошо" Else Debug.Print "Удовлетворительно" End If End Sub ```
* **Вложенные If (If внутри If):**
```vba Sub NestedIf() Dim num As Integer num = 15
If num > 0 Then If num Mod 2 = 0 Then 'Проверка на четность Debug.Print "Положительное и четное" Else Debug.Print "Положительное и нечетное" End If ElseIf num < 0 Then Debug.Print "Отрицательное" Else Debug.Print "Ноль" End If End Sub ```
* **Однострочный If (без End If):**
```vba Sub OneLineIf() Dim x As Integer x = 10 If x > 5 Then Debug.Print "x больше 5" End Sub ``` Однострочный `If` используется, когда нужно выполнить *только одно* действие, если условие истинно. `Else` в однострочном `If` не допускается.
### 2. Оператор Select Case
Оператор `Select Case` предоставляет более удобный способ выбора одного из нескольких блоков кода на основе значения *одной* переменной или выражения. Он особенно полезен, когда у вас много возможных значений, и использовать `If...Then...ElseIf` было бы громоздко.
**Синтаксис:**
```vba Select Case проверяемое_выражение Case значение1 ' Код, выполняемый, если проверяемое_выражение равно значению1 Case значение2 ' Код, выполняемый, если проверяемое_выражение равно значению2 [Case значение3 To значение4] ' Код для диапазона значений [Case Is > значение5] 'Код, если значение больше [Case Else] ' Код, выполняемый, если ни один из Case не подошел End Select
```
**Пояснения:**
* `проверяемое_выражение`: Переменная или выражение, значение которого будет сравниваться. * `Case значение1`, `Case значение2`: Указывают конкретные значения, с которыми сравнивается `проверяемое_выражение`. * `Case значение3 To значение4`: Позволяет указать *диапазон* значений. * `Case Is > значение5`: Позволяет использовать операторы сравнения (`>`, `<`, `=`, `>=`, `<=`, `<>`). * `Case Else`: Необязательная часть. Код выполняется, если ни одно из предыдущих условий `Case` не подошло. * `End Select`: Обязательно завершает конструкцию `Select Case`.
**Примеры:**
* **Простой Select Case:**
```vba Sub SimpleSelectCase() Dim dayOfWeek As Integer dayOfWeek = 3 'Например, среда
Select Case dayOfWeek Case 1 Debug.Print "Понедельник" Case 2 Debug.Print "Вторник" Case 3 Debug.Print "Среда" Case 4 Debug.Print "Четверг" Case 5 Debug.Print "Пятница" Case 6 Debug.Print "Суббота" Case 7 Debug.Print "Воскресенье" Case Else Debug.Print "Неверный день недели" End Select End Sub ```
* **Select Case с диапазоном:**
```vba Sub SelectCaseRange() Dim temperature As Integer temperature = 22
Select Case temperature Case Is < 0 Debug.Print "Мороз" Case 0 To 10 Debug.Print "Холодно" Case 11 To 25 Debug.Print "Тепло" Case Is > 25 Debug.Print "Жарко" End Select End Sub ```
* **Select Case со строками:**
```vba Sub SelectCaseString() Dim fruit As String fruit = "Яблоко"
Select Case fruit Case "Яблоко", "Груша" ' Несколько значений в одном Case Debug.Print "Фрукт" Case "Банан" Debug.Print "Тоже фрукт, но другой :)" Case Else Debug.Print "Не фрукт" End Select End Sub
```
### Важные моменты и лучшие практики
* **Логические операторы:** В условиях (`If`, `ElseIf`, `Case Is`) можно использовать логические операторы: * `And`: Логическое "И" (оба условия должны быть истинны). * `Or`: Логическое "ИЛИ" (хотя бы одно условие должно быть истинно). * `Not`: Логическое "НЕ" (инвертирует истинность условия). * `Xor`: Исключающее "ИЛИ" (истинно, если только одно из условий истинно). * `Eqv`: Эквивалентность (истинно, если оба условия имеют одинаковое значение). * `Imp`: Импликация.
```vba If (x > 5 And y < 10) Or z = 0 Then ' ... End If ```
* **Читаемость:** Используйте отступы (Tab), чтобы сделать код более читаемым и понятным. Это особенно важно для вложенных `If` и `Select Case`.
* **Комментарии:** Не забывайте комментировать сложные условия, чтобы объяснить, что они делают.
* **Выбор между If и Select Case:** Если у вас много условий, основанных на *одной* переменной, `Select Case` обычно предпочтительнее. Если условия более сложные или включают разные переменные, используйте `If...Then...Else`.
* **Типы данных:** Убедитесь, что типы данных в ваших условиях и `Case` совместимы.
