Несколько операторов в одной строке vba excel
Оператор If…Then…Else предназначен для передачи управления одному из блоков операторов в зависимости от результатов проверяемых условий.
Однострочная конструкция
Оператор If…Then…Else может использоваться в однострочной конструкции без ключевых слов Else, End If.
Синтаксис однострочной конструкции If…Then…
Компоненты однострочной конструкции If…Then…
- условие — числовое или строковое выражение, возвращающее логическое значение True или False;
- операторы — блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True.
Если компонент условие возвращает значение False, блок операторов конструкции If…Then… пропускается и управление программой передается следующей строке кода.
Пример 1
Многострочная конструкция
Синтаксис многострочной конструкции If…Then…Else
Компоненты многострочной конструкции If…Then…Else:
- условие — числовое или строковое выражение, следующее за ключевым словом If или ElseIf и возвращающее логическое значение True или False;
- операторы — блок операторов кода VBA Excel, который выполняется, если компонент условие возвращает значение True;
- пунктирная линия обозначает дополнительные структурные блоки из строки ElseIf [условие] Then и строки [операторы] .
Если компонент условие возвращает значение False, следующий за ним блок операторов конструкции If…Then…Else пропускается и управление программой передается следующей строке кода.
Самый простой вариант многострочной конструкции If…Then…Else:
Пример 2
Функция IIf
Функция IIf проверяет заданное условие и возвращает значение в зависимости от результата проверки.
Синтаксис функции
Компоненты функции IIf
- условие — числовое или строковое выражение, возвращающее логическое значение True или False;
- если True — значение, которое возвращает функция IIf, если условие возвратило значение True;
- если False — значение, которое возвращает функция IIf, если условие возвратило значение False.
Компоненты если True и если False могут быть выражениями, значения которых будут вычислены и возвращены.
Пример 3
Пример 4
Стоит отметить, что не зависимо от того, выполняется условие или нет, функция IIf вычислит оба выражения в параметрах если True и если False:
При нажатии кнопки «Cancel» или закрытии крестиком диалогового окна InputBox из первых двух примеров, генерируется ошибка, так как в этих случаях функция InputBox возвращает пустую строку. Присвоение пустой строки переменной d типа Integer вызывает ошибку. При нажатии кнопки «OK» диалогового окна, числа, вписанные в поле ввода в текстовом формате, VBA Excel автоматически преобразует в числовой формат переменной d. В третьем примере есть обработчик ошибок.
19 комментариев для “VBA Excel. Оператор If…Then…Else и функция IIf”
при ElseIf после Then выражение должно быть обязательно с новой строки
Спасибо, Александр!
Я изменил некоторые формулировки в статье, допускающие неоднозначное толкование. Кроме того, я решил проверить, что будет, если поместить при ElseIf выражение после Then, и вот что получилось:
Код работает! Но он не будет работать, если строки
заменить на строку
Конструкция:
if (condition)
then (action 1)
else (action 2)
Допустим, condition = true. Следовательно, выполняется action 1. Но затем операции, совершенные в action 1, приводят к тому, что условие уже не соблюдается, т.е. после завершения action 1 condition = false. Означает ли это, что сработает также конструкция else и будут выполняться операции action 2? Или условие всей конструкции if-then-else проверяется в один момент времени и не подвержено влиянию операций внутри конструкции?
Привет, Михаил!
Условие в вашей конструкции проверяется один раз:
И даже если в конструкции используется блок ElseIf . Then , для проверки условия используется первоначальное значение:
В обоих случаях MsgBox выведет число 5.
чем отличается однострочная и многострочная форма синтаксиса
Привет, Виктор!
Однострочная запись короче и работает только с одним условием.
Здравствуйте, Евгений!
Однострочная запись работает не только с одним условием.
Добрый вечер!
Здесь «одно условие» означает выражение, которое может состоять из нескольких входящий в него условий (лучше сказать «под-условий») и возвращает логическое значение True или False. Такое выражение может быть только одно в однострочной записи.
Второе условие расположено в многострочной записи после ключевого слова Then и операторов, выполняемых при истинном значении первого условия, и предваряется ключевым словом ElseIf.
Здравствуйте, Евгений!
Может знаете, что быстрее
Не знаю, не сравнивал. Измерьте скорость выполнения обоих вариантов с помощью функции MicroTimer.
Решить с помощью VBA
Определите, является ли заданное целое число А нечётным двузначным
числом.
Привет, Икром!
Решение может быть таким:
Здравствуйте!
«блок операторов после ключевого слова Else выполняется в любом случае, но структурный блок кода из строки Else и строки [операторы] не является обязательным и может быть пропущен».
Это только у меня вызывает недоумение?
«блок операторов после ключевого слова Else выполняется в любом случае»?! Да ну!
И то, что после «но» вовсе не противоречит первой части, хотя при употреблении «но» должно бы.
А по смыслу вторая это «после но» д.б. в отдельном предложении, даже в отдельном абзаце.
Добрый день!
Согласен. Это выражение касается функции IIf. Исправил. Спасибо за бдительность!
Есть столбик с процентами выполнения плана. Если больше 70%,то цвет текста зеленый, если меньше 40% то цвет текста красный. Как это прописать у меня получается только покрасить весь столбец в красный. Помогите пожалуйста я всю голову словмал что не так.
Павел, если в ячейке с процентным форматом отображается 90%, то фактически в ней содержится число 0,9. Вам надо сравнивать значения ячеек не с 70 и 40, а с 0,7 и 0,4.
Евгений, я так пробовал, но тогда сразу подсвечивается красным вся переменная.
При написании кода иногда можно создавать длинные операторы, требующие горизонтальной прокрутки в редакторе кода. Хотя это не влияет на способ выполнения кода, он затрудняет чтение кода в том виде, в котором он отображается на мониторе. В таких случаях следует рассмотреть возможность разбиения одного длинного оператора на несколько строк.
Разбиение одного оператора на несколько строк
Используйте символ продолжения строки, который является подчеркиванием ( _ ), в точке, в которой должна прерываться линия. Символу подчеркивания должен предшествовать пробел и сразу за ним следует символ конца строки (возврат каретки) или (начиная с версии 16,0) комментарий, за которым следует символ возврата каретки.
в некоторых случаях, если опустить символ продолжения строки, компилятор Visual Basic неявно продолжит инструкцию на следующей строке кода. Список элементов синтаксиса, для которых можно опустить символ продолжения строки, см. в разделе «неявные продолжения строки» в инструкциях.
В следующем примере инструкция разбивается на четыре строки с символами продолжения строки, завершающими все, кроме последней строки.
Использование этой последовательности упрощает чтение кода в сети и при печати.
Символ продолжения строки должен быть последним символом в строке. Вы не можете подписаться на него другим в той же строке.
Существуют некоторые ограничения, в которых можно использовать символ продолжения строки. Например, нельзя использовать его в середине имени аргумента. Можно прервать список аргументов с помощью символа продолжения строки, но отдельные имена аргументов должны оставаться неизменными.
Комментарий нельзя продолжить с помощью символа продолжения строки. Компилятор не проверяет символы в комментарии на наличие специального значения. Для многострочного комментария повторите символ комментария ( ' ) в каждой строке.
хотя размещение каждой инструкции в отдельной строке является рекомендуемым методом, Visual Basic также позволяет размещать несколько инструкций в одной строке.
инструкция в Visual Basic является полной инструкцией. Он может содержать ключевые слова, операторы, переменные, константы и выражения. Каждая инструкция принадлежит к одной из следующих категорий:
Операторы объявления, которые наименают переменную, константу или процедуру, а также могут указывать тип данных.
Исполняемые операторы, инициирующие действия. Эти инструкции могут вызывать метод или функцию, и они могут выполнять цикл или ветвление по блокам кода. Исполняемые операторы включают Операторы присваивания, которые присваивают значение или выражение переменной или константе.
В этом разделе описывается каждая категория. Кроме того, в этом разделе описывается, как объединить несколько инструкций в одной строке и как продолжить выполнение инструкции на нескольких строках.
Инструкции объявления
Операторы объявления используются для именования и определения процедур, переменных, свойств, массивов и констант. При объявлении программного элемента можно также определить его тип данных, уровень доступа и область. Дополнительные сведения см. в разделе Характеристики объявленных элементов.
Следующий пример содержит три объявления.
Первое объявление — это Sub оператор. Вместе с его оператором сопоставления End Sub объявляется процедура с именем applyFormat . Он также указывает applyFormat , что это Public означает, что любой код, который может ссылаться на него, может вызывать его.
Второе объявление — это Const оператор, который объявляет константу limit , указывая Integer тип данных и значение 33.
Третье объявление — это Dim оператор, объявляющий переменную thisWidget . Тип данных — это конкретный объект, а именно объект, созданный из Widget класса. Можно объявить переменную для любого простейшего типа данных или любого типа объекта, предоставляемого в используемом приложении.
Начальные значения
при выполнении кода, содержащего оператор объявления, Visual Basic резервирует память, необходимую для объявленного элемента. если элемент содержит значение, Visual Basic инициализирует его значением по умолчанию для его типа данных. Дополнительные сведения см. в разделе «поведение» в операторе Dim.
Начальное значение переменной можно присвоить как часть объявления, как показано в следующем примере.
Если переменная является объектной переменной, можно явно создать экземпляр его класса при объявлении с помощью ключевого слова New operator , как показано в следующем примере.
Обратите внимание, что начальное значение, указанное в операторе объявления, не присваивается переменной до тех пор, пока выполнение не достигнет оператора объявления. До этого времени переменная будет содержать значение по умолчанию для его типа данных.
Исполняемые операторы
Исполняемый оператор выполняет действие. Он может вызывать процедуру, переходить к другому месту в коде, выполнять перебор нескольких инструкций или оценивать выражение. Оператор присваивания является особым случаем исполняемого оператора.
В следующем примере используется If. Then. Else структура элемента управления для выполнения различных блоков кода на основе значения переменной. В каждом блоке кода For. Next цикл выполняется заданное число раз.
If Инструкция в предыдущем примере проверяет значение параметра clockwise . Если значение равно True , вызывается spinClockwise метод aWidget . Если значение равно False , вызывается spinCounterClockwise метод aWidget . If. Then. Else Структура элемента управления заканчивается на End If .
For. Next Цикл внутри каждого блока вызывает соответствующий метод несколько раз, равным значению revolutions параметра.
Операторы присваивания
Операторы присваивания выполняют операции присваивания, которые состоят из значения с правой стороны оператора присваивания ( = ) и сохраняют его в элементе слева, как показано в следующем примере.
В предыдущем примере инструкция присваивания сохраняет литеральное значение 42 в переменной v .
Подходящие программные элементы
Программный элемент в левой части оператора присваивания должен иметь возможность принимать и сохранять значение. Это означает, что это должна быть переменная или свойство, не предназначенное только для чтенияили которое должно быть элементом массива. В контексте оператора присваивания такой элемент иногда называют левостороннимзначением для «левого значения».
Значение в правой части оператора присваивания формируется выражением, которое может состоять из любого сочетания литералов, констант, переменных, свойств, элементов массива, других выражений или вызовов функций. Это показано в следующем примере.
В предыдущем примере значение, содержащееся в переменной y , добавляется в значение переменной z , а затем добавляется значение, возвращаемое вызовом функции findResult . Общее значение этого выражения сохраняется в переменной x .
Типы данных в операторах присваивания
В дополнение к числовым значениям оператор присваивания также может назначать String значения, как показано в следующем примере.
Можно также назначать Boolean значения с помощью Boolean литерала или Boolean выражения, как показано в следующем примере.
Аналогичным образом можно назначить соответствующие значения для программирования элементов Char типа данных, Date или Object . Можно также назначить экземпляр объекта элементу, объявленному как класс, из которого создается этот экземпляр.
Составные операторы присваивания
Составные операторы присваивания сначала выполняют операцию над выражением, прежде чем присваивать его элементу программирования. В следующем примере показан один из этих операторов += , который увеличивает значение переменной слева от оператора на значение выражения в правой части.
В предыдущем примере к значению n добавляется 1, а затем это новое значение сохраняется в n . Это краткий эквивалент следующей инструкции:
С помощью операторов этого типа можно выполнять разнообразные операции составного присваивания. Список этих операторов и дополнительные сведения об этих операторах см. в разделе Операторы присваивания.
Оператор присваивания объединения ( &= ) полезен для добавления строки в конец уже существующих строк, как показано в следующем примере.
Преобразования типов в операторах присваивания
Значение, присваиваемое переменной, свойству или элементу массива, должно иметь тип данных, соответствующий целевому элементу. В общем случае следует попытаться создать значение того же типа данных, что и у целевого элемента. Однако некоторые типы могут быть преобразованы в другие типы во время назначения.
Дополнительные сведения о преобразовании типов данных см. в разделе преобразования типов в Visual Basic. вкратце, Visual Basic автоматически преобразует значение заданного типа в любой другой тип, в который он расширяется. Расширяющее преобразование — это одно из, которое всегда выполняется во время выполнения и не теряет никаких данных. например, Visual Basic преобразует Integer значение в Double при необходимости, поскольку Integer расширяется до Double . Для получения дополнительной информации см. Widening and Narrowing Conversions.
Сужающие преобразования (которые не расширяются) приводят к риску сбоя во время выполнения или потери данных. Сужающие преобразования можно выполнить явным образом с помощью функции преобразования типа. также можно указать компилятору выполнять все преобразования неявно, задав Option Strict Off . Дополнительные сведения см. в разделе явные и неявные преобразования.
Размещение нескольких инструкций на одной строке
Можно использовать несколько операторов в одной строке, разделенных символом двоеточия ( : ). Это показано в следующем примере.
Хотя иногда удобно, такая форма синтаксиса делает код трудным для чтения и обслуживания. Поэтому рекомендуется размещать один оператор в строке.
Продолжение выполнения инструкции на нескольких строках
Оператор обычно размещается на одной строке, но если он слишком длинный, его можно продолжить на следующей строке с помощью последовательности продолжения строки, которая состоит из пробела, за которым следует символ подчеркивания ( _ ), за которым следует возврат каретки. В следующем примере MsgBox Исполняемый оператор продолжает находиться на двух строках.
Неявное продолжение строки
Во многих случаях оператор можно продолжить в следующей строке подряд без использования символа подчеркивания ( _ ). Следующие элементы синтаксиса неявно пропродолжат оператор в следующей строке кода.
После запятой ( , ). Пример.
После открывающей скобки ( ( ) или перед закрывающей круглой скобкой ( ) ). Пример.
После открытого внедренного выражения ( ) в XML-литерале. Пример:
После оператора объединения ( & ). Пример.
После операторов присваивания ( = , := &= ,, -= += ,, *= , /= , \= , ^= , >= ). Пример:
Is После операторов и IsNot . Пример.
После символа квалификатора элемента ( . ) и перед именем члена. Пример:
Однако при использовании With инструкции или предоставлении значений в списке инициализации для типа необходимо включить символ продолжения строки ( _ ) после символа квалификатора элемента. Рассмотрите возможность разбиения строки после оператора присваивания (например, = ) при использовании With инструкций или списков инициализации объектов. Пример:
После квалификатора свойства оси XML ( . или .@ или . ). Однако при использовании With ключевого слова необходимо включить символ продолжения строки ( _ ) при указании квалификатора элемента. Пример.
Дополнительные сведения см. в разделе Свойства осей XML.
После знака "меньше" ( < ) или перед знаком "больше" ( >) при указании атрибута. Также после знака "больше" ( > ) при указании атрибута. Однако при указании атрибутов уровня сборки или уровня модуля необходимо включить символ продолжения строки ( _ ). Пример:
Дополнительные сведения см. в разделе Общие сведения об атрибутах.
До и после операторов запроса ( Aggregate , Distinct , From , Group By Group Join ,, Join , Let , Order By , Select , Skip Take Skip While . Take While Where ,, In , Into On Ascending ,, и Descending ). Нельзя разбивать строку между ключевыми словами операторов запроса, которые состоят из нескольких ключевых слов ( Order By , Group Join , Take While и Skip While ). Пример:
Дополнительные сведения см. в разделе запросы.
In После ключевого слова в For Each операторе. Пример:
Дополнительные сведения см. в разделе For Each. Следующий оператор.
From После ключевого слова в инициализаторе коллекции. Пример.
Дополнительные сведения см. в разделе Инициализаторы коллекций.
Добавление комментариев
Исходный код не всегда говорят сами за себя, даже программисту, который написал его. Для облегчения документирования кода большинство программистов используют внедренные комментарии. Комментарии в коде могут объяснить процедуру или конкретную инструкцию, которая может быть прочитана или обработана другим пользователем позже. Visual Basic игнорирует комментарии во время компиляции и не влияет на скомпилированный код.
Строки комментариев начинаются с апострофа ( ' ) или REM за ним пробела. Их можно добавлять в любом месте кода, за исключением строк. Чтобы добавить комментарий к оператору, вставьте апостроф или REM после оператора, за которым следует комментарий. Комментарии также можно найти в отдельной строке. В следующем примере демонстрируются эти возможности.
Проверка ошибок компиляции
Выполняет один или группу операторов в зависимости от значения выражения.
Синтаксис
Если условие Затем [ заявления ] [ Else elsestatements ]
Также можно использовать синтаксис вложенных операторов:
Если условие Затем
[ заявления ]
[ ElseIf condition-n Then
[ elseifstatements ]]
[ Else
[ elsestatements ]]
End If
If . Затем. Другой синтаксис заявления имеет эти части.
Числовое выражение или строковое выражение, оцененное как True либо False. Если условие Null, условие рассматривается как False.
Примечания
Используйте одностройную форму (первый синтаксис) для коротких простых тестов. Однако форма блока (второй синтаксис) является более функциональной и простой для чтения, выполнения и отладки.
При использовании однострочной формы возможно выполнение нескольких операторов при соответствующем условии If. Then. Все операторы должны находиться в одной строке и разделяться двоеточием:
Оператор If блочной формы должен быть первым оператором в строке. У Else, ElseIf и End If может быть номер строки или метка строки, предшествующие им в строке. Блок If должен заканчиваться оператором End If.
Чтобы определить, является ли утверждение блоком If, изучите, что следует за ключевым словом Then . Если ничего, кроме комментария, не стоит после Then на той же строке, это однострочный оператор If.
Части Else и ElseIf являются необязательными. Можно использовать сколько угодно частей ElseIf в блоке If, но они не должны стоять после Else. Блоки оператора If могут быть вложенными, то есть содержать внутри другие.
При выполнении блока If (второй синтаксис) проверяется значение condition. Если condition является True, тогда выполняются операторы, стоящие после Then. Если condition равняется False, каждое условие ElseIf (если такое имеется) оценивается по порядку. При обнаружении условия со значением True выполняются операторы, следующие за относящейся к ним части Then. Если ни одно из значений, следующих за ElseIf, не равняется True (или если отсутствует ElseIf), выполняются операторы, следующие за Else. После выполнения операторов, следующих за Then либо Else, выполняются операторы после End If.
Выбор Case может быть полезнее при оценке одного выражения, которое имеет несколько возможных действий. Тем не менее, предложение объектного типа TypeOf Is objecttype не может использоваться в заявлении Select Case.
TypeOf невозможно использовать с такими типами данных, как Long, Integer ( кроме Object).
Пример
В этом примере показаны как блочная форма оператора If. Then. Else, так и его однострочное написание. В нем также показано использование оператора If TypeOf. Then. Else.
Используйте конструкцию If TypeOf , чтобы определить, является ли управление, переданным в процедуру, текстовым полем.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Этим видео-уроком я хочу начать серию видео-уроков, которые будут посвящены основам работы в программе Microsoft Word.
Основные операторы языка VBA
3.1. Правила записи операторов
При записи операторов необходимо придерживаться следующих правил:
- Каждый новый оператор записывается с новой строки.
- Чтобы записать несколько операторов на одной строке, их разделяют между собой двоеточием (:).
- Если оператор не помещается в одной строке, то необходимо поставить в конце строки пробел и знак подчеркивания ( _), а затем продолжить не поместившуюся часть на следующей строке.
3.2. Оператор присваивания
Оператор присваивания используется, если какой-то переменной нужно присвоить новое значение. Он имеет следующий синтаксис:
ИМЯ_ПЕРЕМЕННОЙ = ВЫРАЖЕНИЕ
Сначала вычисляется выражение в правой части, а затем результат присваивается переменной, стоящей в левой части.
Например . Записать с помощью оператора присваивания следующее математическое выражение:
На VВА это выражение можно записать в виде следующего оператора:
3.3. Операторы ввода-вывода
3.3.1. Оператор и функция MsgBox
Оператор MsgBox осуществляет вывод информации в диалоговом окне и устанавливает режим ожидания нажатия кнопки пользователем.
Он имеет следующий синтаксис:
Заголовок - задает заголовок окна.
Функция MsgBox возвращает значение типа Integer, указывающее, какая кнопка была нажата в диалоговом окне.
Таблица 3.1. Допустимые значения переменной кнопки
Отображение
Аргумент
Кнопки ОК и Отмена
Кнопки Да и Нет
Кнопки Да, Нет и Отмена
Кнопки Прекратить, Повторить и Игнорировать
Кнопки Повторить и Отмена.
Для этого можно использовать следующий оператор:
MsgBox "Сегодня на календаре" & Date , , "Внимание"
В результате будет выведено следующее окно (рис.3.1).
3.3.2. Функция 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 Else ОПЕРАТОР_2
ОПЕРАТОР_1 выполняется, если УСЛОВИЕ истинно, в противном случае выполняется ОПЕРАТОР_2. При этом оператор If…Then…Else записывается в одну строку.
УСЛОВИЕ – это выражение логического типа. Результат выражения всегда имеет булевский тип. Выражение может быть простым и сложным. При записи простых условий могут использоваться все возможные операции отношения, указанные в табл. 3.2.
Таблица 3.2. Логические отношения
Операция
Название
Выражение
Результат
True, если А равно В
True, если А не равно В
True, если А ,больше В
True, если А меньше В
Больше или равно
True, если А больше или равно В
Меньше или равно
True, если А меньше или равно В
Сложные условия образуются из простых путем применения логических операций и круглых скобок. Список логических операций приведен в табл. 3.3.
Таблица 3.3. Логические операции
Название
Выражение
А
В
Результат
Not
And
Or
В условном операторе допустимо использование блока операторов вместо любого из операторов. В этом случае условный оператор имеет вид:
If УСЛОВИЕ Then
Else
End If
В условном операторе может проверяться несколько условий. В этом случае условный оператор имеет вид:
If УСЛОВИЕ_1 Then
ElseIf УСЛОВИЕ_2 Then
Else
End If
Пример 1 . Написать часть программы для алгоритма на рис. 3.3.
Пример 2. Написать часть программы для алгоритма на рис. 3.4.
3.5. Оператор выбора Select Case
Оператор Select Case удобно использовать, когда в зависимости от значения некоторого выражения, имеющего конечное множество допустимых значений, необходимо выполнить разные действия. Он также относится к условным операторам, но имеет другой вид:
Select Case ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ
Case ЗНАЧЕНИЯ_1
Case ЗНАЧЕНИЯ_N
[Case Else
End Select
ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ может иметь любой скалярный тип, кроме вещественного. ЗНАЧЕНИЯ состоят из произвольного количества значений или диапазонов, отделенных друг от друга запятыми.
Тип ЗНАЧЕНИЙ должен совпадать с типом ПРОВЕРЯЕМОГО_ВЫРАЖЕНИЯ.
Сначала вычисляется ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ. Если его значение совпадает с одним из значений ЗНАЧЕНИЯ_I, то выполнятся ОПЕРАТОРЫ_I и управление передается оператору, стоящему после End Select. Если его значение не совпадает ни с одним из значений ЗНАЧЕНИЯ_I, то выполнятся ИНАЧЕ_ОПЕРАТОРЫ и управление передается оператору, стоящему после End Select
Например. Написать часть программы для алгоритма на рис. 3.5, определяющего значение переменной S в зависимости от значения переменной n.
3.6. Операторы цикла
Для реализации циклического вычислительного процесса, т. е. многократного выполнения одного или нескольких операторов, служит оператор цикла For…Next, который имеет следующий синтаксис:
For СЧЕТЧИК=НАЧ_ЗНАЧЕНИЕ Тo КОН_ЗНАЧЕНИЕ Step ШАГ
[Exit For]
Next СЧЕТЧИК
Цикл For…Next перебирает значения переменной СЧЕТЧИК, которая является параметром цикла, от начального до конечного значения с указанным шагом изменения. При этом обеспечивается выполнение блока операторов тела цикла при каждом новом значении счетчика. Если Step ШАГ в конструкции отсутствует, то по умолчанию считается, что шаг равен 1. По оператору Exit For можно выйти из оператора цикла до того, как СЧЕТЧИК достигнет последнего значения.*
Для перебора объектов из группы подобных объектов, например, ячеек из диапазона или элементов массива, удобно использовать оператор цикла For… Each…Next.
For Each Элемент In Группа
[Exit For]
Next Элемент
В VBA для организации циклов с неизвестным заранее числом повторений используются и другие операторы цикла:
циклы с предусловием – Do While … Loop,
Do Until … Loop;
циклы с постусловием – Do … Loop While,
Do … Loop Until.
Ниже приведен синтаксис этих операторов цикла:
' Цикл с предусловием Do While … Loop
Do While УСЛОВИЕ
[Exit Do]
Loop
Примечание. Не рекомендуется принудительно изменять значения параметра цикла, его начального и конечного значения в теле цикла For…Next.
' Цикл с предусловием Do Until … Loop
Do Until УСЛОВИЕ
[Exit Do]
Loop
' Цикл с постусловием Do … Loop While
Do
[Exit Do]
Loop While УСЛОВИЕ
' Цикл с постусловием Do … Loop Until
Do
[Exit For]
Loop Until УСЛОВИЕ
Оператор Do While…Loop обеспечивает многократное повторение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор Do Until…Loop пока УСЛОВИЕ не соблюдается. Операторы Do…Loop While, Do…Loop Until отличаются от перечисленных выше операторов тем, что сначала блок операторов выполняется по крайней мере один раз, а потом проверяется УСЛОВИЕ.
Для избежания зацикливания в теле цикла должен быть хотя бы один оператор, который изменяет значения переменных, стоящих в УСЛОВИИ.
Оператор Exit Do обеспечивает досрочный выход из оператора цикла.
Читайте также: