Условный оператор в VBA. Конструкции управления Visual Basic Vba условия

Зачастую в определенном месте программы необходимо выполнять те или иные операторы, в зависимости от некоторых условий. Эта возможность в Visual Basic реализовать при помощи так называемых управляющих конструкций (или структур), которые в свою очередь состоят из структур принятий решений и циклов. Ниже приводится подробное описание двух существующих конструкций принятия решений.

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

If условие Then оператор

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

Если при выполнении условия требуется выполнить не один, а несколько операторов, то следует использовать такую конструкцию:

If условия Then Операторы End If

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

При необходимости выполнении того или иного оператора (или блока операторов) в зависимости от результата проверки определенного условия, в языке Visual Basic следует использовать такую конструкцию:

If условия Then Операторы1 Else Операторы2 End If

If условие Then Операторы1 Else: Операторы2 End If

Если результат проверки условия является значение True, то будет выполнен блок операторы1, находящийся после ключевого слова Then. С другой стороны, если проверка условия дала результат False, то будет выполнен блок операторы2, расположенный после служебного слова Else.

Во втором из приведенных вариантов в качестве блока операторы2 может использоваться как один оператор (тогда он записывается после знака ":" в той же строке, что и служебное слово Else), так и несколько (при этом каждый оператор, начинается со второго, записывается в отдельной строке).

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

If условие Then Операторы1 ElseIf условие2 Then Операторы2 . . End If

Если условие1, находящееся после ключевого слова If, истинно, то выполняется блок операторы1, расположенный после Then. Если же оно ложно, то осуществляется проверка условия2, находящегося после служебного слова ElseIf, в случае его истинности выполняется блок операторы2 и т.д. Если ни одно из условий не является истинным, то есть результатом всех проверок является значение False, то выполнятся блок операторыN, расположенный после ключевого слова Else (данный блок является необязательным).

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

Синтаксис данной функции имеет вид:

IIf(условие, значение1, значение2)

В том случае, когда результатом проверки условия является значение True, функция возвращает значение1, а когда проверка дает значение False, то возвращаемы результат - значение2. Например:

Dim intA As Integer, strA As String intA = 6 strA = IIf(intA Mod 2=0, "Четное", "Не четное")

Если число intA делится на 2 без остатка, то строке strA будет присвоено значение "Четное", в противном случае - "Не четное".

Конструкция Select:Case. Когда существует несколько операторов (или блоков операторов), которые необходимо выполнять в случае истинности того или иного условия, то запись конструкции If:Then окажется достаточно громоздкой. Поэтому в подобных случаях следует использовать структуру Select:Case, которая улучшает читаемость программы. Ее конструкция выглядит следующим образом:

Select Case переменная Case значения1 Операторы1 Case значения2 Операторы2 . . . End Select

Если переменная содержит значение1, расположенное после первого по порядка ключевого слова Case, то выполняется блок операторы1. С другой стороны, если содержимое переменной равно значению2, то выполняется блок операторы2 и т.д. Когда содержимое переменной не равно ни одному из приведенных значений, то выполняется блок операторыN, находящийся после служебного словосочетания Case:Else, которое является необязательным в рассматриваемой конструкции.

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

Например:

Select Case x Case 1 x=x+1 Case 2, 3, 4 x=10 Case Else x=20 End Select

Использование условного оператора неотъемлемая часть практически любого языка программирования. И фактически, все исходит от математики, так как изначально, языки программирования формировались как средства для решения различных задач. Скажу сразу, статья скучная и неинтересная Так как выжать что новое из программирования, в частности из описания операторов просто физически невозможно, но я что-то да придумаю. И так, в языке VBA для проверки условий используется оператор if, который может существовать в нескольких вариациях. Но сперва, немного юмора….

Бежит заяц по лесу и видим медведя, читающего книгу. Заяц спрашивает: “Косолапый, ты что читаешь?” Тот с умным видом отвечает: “Логику”. Косой с удивленным видом спрашивает “А что такое логика?” “Ну смотри” – говорит медведь:

  • М: У тебя спички есть?
  • З: Нет
  • М: Значит, ты не куришь
  • З: Да!
  • М: Если ты не куришь, значит, нет лишних трат денег
  • З: Верно!
  • М: Значит, ты ходишь по девкам?
  • З: Конечно!
  • М: А раз ты ходишь по девкам, значит, ты не импотент!
  • З: Снова верно!

Заяц обрадовался столь умной книге и попросил почитать ее у косолапого. Идет по лесу довольный и радуется, тут ему навстречу волк идет. Заяц решил испробовать логику на сером и спрашивает его:

  • З: У тебя спички есть?
  • В: Да
  • З: Значит ты импотент!

Ну да, пересказал анекдот как помнил

Хорошо, теперь давайте приступим к теории…

Вариант 1 . Самый простой вариант использования условного оператора VBA if, это когда идет проверка условия, и если оно выполняется, то идет выполнение одного выражения:

If условие then выражение

Вариант 2 . Может возникнуть ситуация, когда после проверки условия надо выполнить несколько выражений, в таком случае оператор if принимает вид:

If условие then

Выражение 1

Выражение 2

Выражение N

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

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

If условие then

Выражение 1

Выражение 2

Тут все предельно просто, если условие истинно, выполняется первое выражение, если нет – второй. Стоит помнить, что после проверки условия могут следовать несколько операторов, как в варианте выше.

Вариант 4 : Проверка нескольких условий:

If условие 1 then

Выражения 1

ElseIf условие 2 then

Выражения 2

ElseIf условие 3 then

Выражения 3

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

Хорошо, теперь напишем простой пример использования конструкции VBA if then. Создайте форму в редакторе Visual Basic for Applications и добавьте на ее поверхность три текстовые метки () и одну кнопку (). В редакторе кодапропишем:

Private Sub GetSub() Dim MySumm As Integer Dim MyVar As Byte MyVar = 0 Do While MySumm <= 10000 MySumm = MySumm + 1 If MySumm = 10 Then Label1.Caption = "Сумма достигла значения 10" ElseIf MySumm = 100 Then Label2.Caption = "Сумма достигла значения 100" ElseIf MySumm = 1000 Then Label3.Caption = "Сумма достигла значения 1000" Else Label4.Caption = "Достигнуто значение " & MySumm End If Loop End Sub Private Sub CommandButton1_Click() Call GetSub End Sub Private Sub UserForm_Initialize() Label1.Caption = "" Label1.FontSize = 13 Label1.ForeColor = vbRed Label2.Caption = "" Label2.FontSize = 13 Label2.ForeColor = vbGreen Label3.Caption = "" Label3.FontSize = 13 Label3.ForeColor = vbBlue Label4.Caption = "" Label4.FontSize = 13 CommandButton1.Caption = "Выполнить" End Sub

В процедуре GetSub происходит использование цикла , условие выполнение цикла – значение переменной MySumm должно быть меньше или ровно 10000. В теле самого цикла используются операторы VBA if then с несколькими вариантами. Происходит проверка условий: если сумма достигла значения 10, то записать в первое текстовое поле одну информацию, если 100 – другую информацию, если 1000 – третью информацию, в противном случае – записать данные в свойство Caption четвертого текстового поля.

Основные операторы языка VBA

Комментарии (0)

3.1. Правила записи операторов

При записи операторов необходимо придерживаться следующих правил:

Каждый новый оператор записывается с новой строки.

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

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

3.2. Оператор присваивания

Оператор присваивания используется, если какой-то переменной нужно присвоить новое значение. Он имеет следующий синтаксис:

ИМЯ_ПЕРЕМЕННОЙ = ВЫРАЖЕНИЕ

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

Например . Записать с помощью оператора присваивания следующее математическое выражение:

На VВА это выражение можно записать в виде следующего оператора:

Y = a^(1/3)+(a^2+Exp(-b))/(Sin(a)^2-Log(b))

3 .3. Операторы ввода-вывода

3 .3.1. Оператор и функция MsgBox

Оператор MsgBox осуществляет вывод информации в диалоговом окне и устанавливает режим ожидания нажатия кнопки пользователем.

Он имеет следующий синтаксис:

MsgBox Сообщение[,Кнопки][, Заголовок]

Аргументы:

Сообщение - обязательный аргумент, задающий в окне выводимое информационное сообщение. Может состоять из нескольких текстовых строк, объединенных знаком & . Использование в этом аргументе Chr(13) приводит к переходу на новую строку при выводе информации.

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

Заголовок - задает заголовок окна.

Функция MsgBox возвращает значение типа Integer, указывающее, какая кнопка была нажата в диалоговом окне.

Таблица 3.1. Допустимые значения переменной кнопки

Отображение

Аргумент

Кнопка ОК

Кнопки ОК и Отмена

Кнопки Да и Нет

Кнопки Да, Нет и Отмена

Кнопки Прекратить, Повторить и Игнорировать

VbAbortRetryIgnore

Кнопки Повторить и Отмена.

Информационный знак

Знак вопроса

Знак восклицания

Например . Вывести сообщение о текущей дате.

MsgBox "Сегодня на календаре" & Date , "Внимание"

В результате будет выведено следующее окно (рис.3.1).

После щелчка по кнопке ОК окно сообщения закроется, и выполнение программы возобновится с оператора, стоящего непосредственно за вызовом MsgBox.

3.3.2. Функция InputBox

Функция InputBox осуществляет ввод значений переменных с помощью окна ввода и имеет следующий синтаксис:

Имя_Переменной = InputBox(Сообщение[, Заголовок ] )

Аргументы:

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

Заголовок - задает заголовок окна.

Например , Ввести значение переменной N с клавиатуры, предусмотрев значение по умолчанию равное 10.

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

N = InputBox("Введите N", "Ввод исходных данных",10)

В результате будет выведено следующее окно для ввода значения переменной N (рис.3.2).

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

Если же значение по умолчанию не подходит пользователю, то перед щелчком по кнопке ОК необходимо ввести нужное значение переменной N.

3 .4. Условный оператор IF

Для реализации разветвляющегося вычислительного процесса в VBA используется оператор If…Then…Else, который представляет собой простейшую форму проверки условий. Он имеет следующий синтаксис:

If УСЛОВИЕ Then ОПЕРАТОР_1 E lse ОПЕРАТОР_2

ОПЕРАТОР_1 выполняется, если УСЛОВИЕ истинно, в противном случае выполняется ОПЕРАТОР_2 . При этом оператор If…Then…Else записывается в одну строку.

УСЛОВИЕ - это выражение логического типа. Результат выражения всегда имеет булевский тип. Выражение может быть простым и сложным. При записи простых условий могут использоваться все возможные операции отношения, указанные в табл. 3.2.

Таблица 3 .2. Логические отношения

Операция

Название

Выражение

Результат

True, если А равно В

True, если А не равно В

True, если А,больше В

True, если А меньше В

Больше или равно

True, если А больше или равно В

Меньше или равно

True, если А меньше или равно В

Сложные условия образуются из простых путем применения логических операций и круглых скобок. Список логических операций приведен в табл. 3.3.

Таблица 3 .3. Логические операции

Название

Выражение

Результат

Логическое
отрицание

Логическое И

Логическое ИЛИ

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

If УСЛОВИЕ Then

БЛОК_ОПЕРАТОРОВ_1

БЛОК_ОПЕРАТОРОВ_2

End I f

В условном операторе может проверяться несколько условий. В этом случае условный оператор имеет вид:

If УСЛОВИЕ_1 Then

БЛОК_ОПЕРАТОРОВ_1

ElseIf УСЛОВИЕ_2 Then

БЛОК_ОПЕРАТОРОВ_2

Else

End If

Пример 1 . Написать часть программы для алгоритма на рис. 3.3.

Пример 2. Написать часть программы для алгоритма на рис. 3.4.

3.5. Оператор выбора Select Case

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

Select Case ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ

Case ЗНАЧЕНИЯ_1

ОПЕРАТОРЫ_1

Case ЗНАЧЕНИЯ _ 2

ОПЕРАТОРЫ _ 2

. . .

Case ЗНАЧЕНИЯ_N

ОПЕРАТОРЫ _N

[ Case Else

ИНАЧЕ _ ОПЕРАТОРЫ]

End Select

ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ может иметь любой скалярный тип, кроме вещественного. ЗНАЧЕНИЯ состоят из произвольного количества значений или диапазонов, отделенных друг от друга запятыми.

Тип ЗНАЧЕНИЙ должен совпадать с типом ПРОВЕРЯЕМОГО_ВЫРАЖЕНИЯ .

Сначала вычисляется ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ . Если его значение совпадает с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ОПЕРАТОРЫ_I End Select . Если его значение не совпадает ни с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ИНАЧЕ_ОПЕРАТОРЫ и управление передается оператору, стоящему после End Select

Например. Написать часть программы для алгоритма на рис. 3.5, определяющего значение переменной S в зависимости от значения переменной n.

3.6. Операторы цикла

Для реализации циклического вычислительного процесса, т. е. многократного выполнения одного или нескольких операторов, служит оператор цикла For…Next , который имеет следующий синтаксис:

For СЧЕТЧИК=НАЧ_ЗНАЧЕНИЕ Т o КОН_ЗНАЧЕНИЕ Step ШАГ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Next СЧЕТЧИК

Цикл For…Next перебирает значения переменной СЧЕТЧИК , которая является параметром цикла, от начального до конечного значения с указанным шагом изменения. При этом обеспечивается выполнение блока операторов тела цикла при каждом новом значении счетчика. Если Step ШАГ в конструкции отсутствует, то по умолчанию считается, что шаг равен 1. По оператору Exit For можно выйти из оператора цикла до того, как СЧЕТЧИК достигнет последнего значения.*

Для перебора объектов из группы подобных объектов, например, ячеек из диапазона или элементов массива, удобно использовать оператор цикла For… Each…Next .

For Each Элемент In Группа

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Next Элемент

В VBA для организации циклов с неизвестным заранее числом повторений используются и другие операторы цикла:

циклы с предусловием - Do While Loop ,

Do Until Loop ;

циклы с постусловием - Do Loop While ,

Do Loop Until .

Ниже приведен синтаксис этих операторов цикла:

" Цикл с предусловием Do While Loop

Do While УСЛОВИЕ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

" Цикл с предусловием Do Until Loop

Do Until УСЛОВИЕ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

" Цикл с постусловием Do Loop While

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Loop While УСЛОВИЕ

" Цикл с постусловием Do Loop Until

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Loop Until УСЛОВИЕ

Оператор Do W hile…Loop обеспечивает многократное повторение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор



Другие новости

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

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

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

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

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

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

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

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

  • условие True или False ;
  • операторы условие возвращает значение 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

If [условие] Then [операторы] ElseIf [условие] Then [операторы] ---------------- Else [операторы] End If

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

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

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

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

If [условие] Then [операторы] Else [операторы] End If

Пример 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 проверяет заданное условие и возвращает значение в зависимости от результата проверки.

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

IIf ([условие], [если 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 из примеров, генерируется ошибка, так как в этих случаях возвращает пустую строку. Присвоение пустой строки переменной d типа Integer вызывает ошибку. При нажатии кнопки «OK» диалогового окна, числа, вписанные в поле ввода в текстовом формате, VBA Excel автоматически преобразует в числовой формат переменной d.

В Visual Basic for Application (VBA) существует несколько способов изменения порядка выполнения инструкций. Управляющие структуры VBA во многом схожи с подобными структурами в других языках программирования.

Основные управляющие структуры VBA:

  • If Then Else "End If
  • For Next
  • While Wend
  • Do Loop
  • Select Case "End Select
  • For Each Next

    Управляющая инструкция 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

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