Методические указания и задания. Описание операторов VB (Visual Basic) Vba логические выражения


Логические операторы VBA используются для объединения результатов отдельных логических выражений, чтобы создать сложные критерии для принятия решений в процедуре (таблица Б.3).

Таблица Б.3 – Логические операторы VBA

Логический

Синтаксис

Имя/Описание

оператор

El And E2

Конъюнкция . True, если оба Е1 и Е2

имеют значение True, иначе – False

El Or E2

Дизъюнкция . True, если одно выра-

жение или оба (Е1 и Е2) являются

равными True; иначе – False

Not El

Отрицание . True, если Е1 имеет зна-

чение False; False, если El является

равным True

El Xor E2

Исключение . True, если Е1 и Е2

имеют разные значения; иначе –

El Eqv E2

Эквивалентность . True,если Е1 име-

ет то же самое значение, что и Е2;

иначе – False

El Imp E2

Импликация . False, когда Е1 является

равным True и Е2 равно False; иначе

True.

Операнды Е в этой таблице представляет собой любое допустимое выражение с результатом типа Boolean, такое как операция сравнения.

Приоритеты выполнения операций при вычислении сложных выражений

Сложное (составное) выражение (complex expression) – это любое выражение, образованное из двух или более выражений. В таблице Б.4 собраны операции по группам в порядке убывания приоритета, то есть чем ниже расположена группа, тем позже выполняются указанные в ней операции. Для изменения этого порядка применяются круглые скобки. Операции одного уровня выполняются слева направо в том порядке, в котором они записаны в выражении.

Таблица Б.4 – Приоритеты операций VBA

Оператор

Комментарии

Возведение в степень, наивысший приоритет

Унарный минус - изменение знака числа

Умножение и деление имеют равные приоритеты; они вы-

Деление нацело

Остаток от деления нацело

Сложение и вычитание имеют равный приоритет; они вы-

числяются по мере появления в выражении слева направо

Всякая конкатенация строк выполняется после любых

арифметических операций в выражении и перед любыми

операциями сравнения или логическими операциями

<, <=, >, >=,

Все операторы сравнения имеют равные приоритеты и вы-

числяются по мере появления в выражении слева направо.

Используйте круглые скобки для группирования операто-

ров сравнения в выражениях

Логические

Not And Or Xor Eqv Im p – имеют низший приоритет

операторы

Приложение В Математические функции VBA

VBA предоставляет стандартный набор математических функций приведенный в таблице В.1.

Таблица B.1 – Математические функции VBA

Возвращает / действие

Возвращает абсолютное значение N

Косинус угла N, где N – это угол, измеренный в ра-

Возвращает синус угла; N – это угол, измеренный в

радианах

Возвращает тангенс угла; N – угол в радианах

Возвращает арктангенс N как угол в радианах

Возвращает константу е, возведенную в степень N (е –

это основание натуральных логарифмов и она (при-

близительно) равна 2,718282

Возвращает целую часть N. Fix не округляет число, а

отрицательным, Fix возвращает ближайшее отрица-

тельное целое большее, чем или равное N

Возвращает целую часть N. Int не округляет число, а

отбрасывает любую дробную часть. Если N является

отрицательным, Int возвращает ближайшее отрица-

тельное целое меньшее, чем или равное N

Возвращает натуральный логарифм N

Возвращает случайное число; аргумент является не-

обязательным. Используйте функцию Rnd только

после инициализации VBA-генератора случайных чи-

сел оператором Randomize

Возвращает знак числа: –1, если N – отрицательное;

1, если N –положительное; 0, если N равно 0

Возвращает корень квадратный из N. VBA отображает

ошибку исполнения, если N – отрицательное

Операнд N означает любое численное выражение? допустимое в

Аргумент тригонометрических функции (синуса, косинуса и тангенса) задается в радианах, а не в градусах. Обратная тригонометрическая функция A t n (x ) возвращает в программу значение угла в радианах от -π/2 до π/2, тангенс которого равен значению арифметического выражения х .

Связь между радианной и градусной мерами угла выражается через иррациональное число π ≈ 3,14159265358979323846.

Радианы=

Градусы× π

Градусы=

Радианы× 180

Для перевода градусов в радианы можно также использовать встроенную функцию Excel - Application.Radians(x ), где x – угол, за-

данный в радианах.

Для получения числового значения константы π с точностью 15 цифр мантиссы можно использовать встроенную функцию Excel Application.Pi(), либо функцию VBA арктангенс

Pi= Application.Pi() либо Pi=4*Atn(1)

Примеры записи тригонометрических функций

Краткие теоретические сведения

1. Синтаксис и семантика языка программирования VBA

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

Основные синтаксические принципы этого языка следующие:

  • VBA нечувствителен к регистру;
  • чтобы закомментировать код до конца строки, используется одинарная кавычка (") или команда REM;
  • символьные значения должны заключаться в двойные кавычки (");
  • максимальная длина любого имени в VBA (переменные, константы, процедуры) - 255 символов;
  • начало нового оператора - перевод на новую строку (точка с запятой, как в C, Java, JavaScript, для этого не используется);
  • ограничений на максимальную длину строки нет (хотя в редакторе в строке помещается только 308 символов). Несколько операторов в одной строке разделяются двоеточиями:
    MsgBox "Проверка 1" : MsgBox "Проверка 2"
  • для удобства чтения можно объединить несколько физических строк в одну логическую при помощи пробела и знака подчеркивания после него:
    MsgBox "Сообщение пользователю" _
    & vUserName

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

Оператор - это наименьшая способная выполняться единица кода VBA. Оператор может объявлять или определять переменную, устанавливать параметр компилятора VBA или выполнять какое-либо действие в программе.

Арифметических операторов в VBA всего 7.

Четыре стандартных: сложение (+), вычитание (−), умножение (*), деление (/), и еще три:

  • возведение в степень (^). Например, 2^3 = 8;
  • целочисленное деление (\). Делит первое число на второе, отбрасывая (не округляя) дробную часть. Например, 5\2 = 2;
  • деление по модулю (Mod). Делит первое число на второе, возвращая только остаток от деления. Например, 5 Mod 2 = 1.

Оператор присваивания в VBA - это знак равенства. Можно записывать так:

Let nVar = 10
а можно еще проще:
nVar = 10

Здесь не путайте знак равенства с оператором равенства. Последнее выражение означает "присвоить переменной nVar значение 10", а если строка выглядит так: If (nVar = 10) , то это значит "если значение переменной nVar равно 10".

Операторов сравнения в VBA всего 8:

  • равенство (=). Например, If (nVar = 10);
  • больше, чем (>) и меньше, чем (10);
  • больше или равно (>=) и меньше или равно (= 10);
  • не равно (). Например, If (nVar10);
  • сравнение объектов (Is). Определяет, ссылаются объектные переменные на один и тот же объект или на разные. Например, If (obj1 is obj2);
  • подобие (Like). Сравнивает строковый объект с шаблоном и определяет, подходит ли шаблон.

Операторы сравнения всегда возвращают True (если утверждение истинно) или False (если утверждение ложно).

Очень часто при проверке нескольких условий используются логические операторы :

  • And - логическое И. Должны быть истинными оба условия;
  • Or - логическое ИЛИ. Должно быть истинным хотя бы одно из условий;
  • Not - логическое отрицание. Возвращает True, если условие ложно;
  • Xor - логическое исключение. В выражении E1 Xor E2 возвращает True, если только E1 = True или только E2 = True, иначе - False;
  • Eqv - эквивалентность двух выражений, возвращает True, если они имеют одинаковое значение;
  • Imp - импликация, E1 Imp E2 возвращает False, если E1 = True и E2 = False, иначе - True.

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

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

Каждая переменная имеет имя. Обращение к переменной происходит по имени. Правила выбора имен в VBA едины для многих элементов (переменные, константы, функции, процедуры и т. п.):

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

При создании программ VBA рекомендуется определиться с правилами, по которым будут присваиваться имена объектам - соглашение об именовании. Чаще всего используется так называемое венгерское соглашение (в честь одного из программистов Microsoft, Charles Simonyi, венгра по национальности):

  • имя переменной должно начинаться с префикса, записанного строчными буквами. Префикс указывает, что именно будет храниться в этой переменной:
    str (или s) - String, символьное значение;
    fn (или f) - функция;
    sub - процедура;
    c (или все буквы имени заглавные) - константа (контейнер для хранения данных, которые, в отличие от переменных, не изменяются в ходе выполнения VBA-программы);
    b - Boolean, логическое значение (True или False);
    d - дата;
    obj (или o) - ссылка на объект;
    n - числовое значение;
  • имена функций, методов и каждое слово в составном слове должно начинаться с заглавной буквы:
    MsgBox objMyDocument.Name
    Sub CheckDateSub()

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

2. Основные типы данных VBA

В VBA предусмотрены следующие типы данных:

  • числовые:
    Byte - целое число от 0 до 255, для хранения нужен 1 байт памяти ;
    Integer - целое число от −32 768 до 32 767, 2 байта ;
    Long - большое целое число от −2 147 483 648 до 2 147 483 647, 4 байта ;
    Currency (денежный) - большое десятичное число с 19 позициями, включая 4 позиции после запятой
    (от –922337203685477,5808 до 922337203685477,5807), 4 байта ,
    используется для хранения чисел, когда точность крайне важна, что бывает при вычислениях с денежными единицами;
    Decimal - еще большее десятичное число с 29 позициями (после запятой можно использовать от 0 до 28 позиций), 8 байт ;
    Single и Double - значения с плавающей запятой (4 и 8 байт )
    (от -3.402823·10 38 до -1.401298·10 -45 для отрицательных значений и
    от 1.401298·10 -45 до 3.402823·10 38 для положительных значений для Single, и
    от -1.79769313486232·10 308 до -4.94065645841247·10 -324 для отрицательных значений и
    от 4.94065645841247·10 -324 до 1.79769313486232·10 308 для положительных значений для Double);
  • строковые (String переменной длины (примерно до 2 млрд символов) и фиксированной длины (примерно до 65 400 символов));
  • дата и время (Date - от 01.01.100 до 31.12.9999), 8 байт ;
  • логический (Boolean - может хранить только значения True и False), 2 байта ;
  • объектный (Object - хранит ссылку на любой объект в памяти);
  • Variant - специальный тип данных, который может хранить любые типы данных, 16 байт +1
Обозначения типов данных является ключевыми словами языка (и выделяется после набора в редакторе VBA). Над различными типами данных допустимы различные операции. В VBA имеются три основных типа операций:
  • математические, выполняются над числами, их результатом являются числа;
  • операции отношения, могут применяться не только к числам, их результатом является значения логического типа;
  • логические, используются в логических выражениях и их результатом являются логические значения.

3. Приоритеты операций

Приоритет Операция
1
2
3
4
5
6
7
8
9
10
11
12
Вызов функции и скобки
^
- (смена знака)
*, /
\
Mod
+, –
>, <, >=, <=, <>, =
Not
And
Or
Xor

4. Математические функции

Функция Возвращаемое значение
Abs (<число>) Модуль (абсолютная величина) числа
Atn (<число>) Арктангенс
Cos (<число>) Косинус
Exp (<число>) Экспонента, т. е. результат возведения основания натурального логарифма в указанную степень
Log(<число>) Натуральный логарифм
Rnd (<число>) Случайное число из интервала [, Заголовок]

Аргументы:

Сообщение - обязательный аргумент, задающий в окне выводимое информационное сообщение. Может состоять из нескольких текстовых строк, объединенных знаком & . Использование в этом аргументе 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 обеспечивает многократное повторение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор



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

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

Результатом любой операции сравнения является значение типа Boolean: True, False.

Если оба операнда в выражении сравнения имеют один и тот же тип данных, VBA выполняет простое сравнение для этого типа.

Если оба операнда в выражении сравнения имеют определенные типы и эти типы не являются совместимыми, VBA выдает сообщение об ошибке несовпадения типов.

Если один или оба операнда в выражении сравнения являются переменными типа Variant, VBA пытается преобразовать тип Variant в какой-либо совместимый тип.

Сравнение строк

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

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

Следует быть внимательным при сравнении строк переменной длины.

Двоичное и текстовое сравнение строк

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

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

Т.к. буквы верхнего регистра имеют меньшие двоичные номера, буквы верхнего регистра располагаются в алфавитном порядке перед буквами нижнего регистра. Поэтому при двоичном сравнении строк, строка "АБВ" будем меньше строки "абв".


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

Для выбора метода сравнения строк используется директива Option Compare


Option Compare


Данная директива должна находиться в области объявления модуля.

Конкатенация строк

Присоединение одной строки к другой называется конкатенацией строк .

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

Оператор конкатенации (&)

Оператор (&)в VBA используется только для конкатенации строк.

Синтаксис


Операнд_1 & Операнд_2 [& Операнд_3..]


Операнд_N - любое допустимое строковое или численное выражение (которое преобразуется в строковое).

Тип данных результата конкатенации строк - String.

Если операнд в выражении конкатенации строк имеет значение Empty или Null, VBA интерпретирует этот операнд как строку нулевой длины (строка не содержащая символов).

Обратите внимание! Символ (&) операции конкатенации обязательно необходимо отделять пробелом от имени переменной, т.к. в противном случае VBA может интерпретировать этот символ как символ определения типа Long.

Оператор сложения в конкатенации строк

Для конкатенации строк можно также использовать оператор (+).

Этот оператор имеет такой же синтаксис и требования, как и оператор (&). Однако следует понимать, что в VBA основное предназначение оператора (+) - это арифметическое сложение. Поэтому, чтобы избежать двусмысленности чтения программного кода, для конкатенации строк настоятельно рекомендуется использовать именно оператор (&).

Приоритеты выполнения операций

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

При вычислении сложных выражений VBA следует следующим правилам:

  • Части выражения, заключенные в круглые скобки, всегда вычисляются в первую очередь;
  • Конкретные операции выполняются в зависимости от иерархии операторов (таблица ниже);
  • При равенстве иерархии операторов, они вычисляются слева направо.
Оператор








2024 © radiocodes.ru.