Логические операторы 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
- математические, выполняются над числами, их результатом являются числа;
- операции отношения, могут применяться не только к числам, их результатом является значения логического типа;
- логические, используются в логических выражениях и их результатом являются логические значения.
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 (<число>) |
Случайное число из интервала
Если условие истинно, то выполняются операторы1, в противном случае выполняются операторы2. Допускается также использование сложного условного оператора, который записывается в виде блока: If условие1 Then операторы1 ElseIf условие2 Then операторы2 операторы3 Фамилия=.TextBox1.Text If Фамилия =”“ Then MsgBox”Вы не ввели фамилию” REM При установленном флажке номер 1 клиенту ‘предоставляется скидка 5% ‘ Сумма – количество денег, выплачиваемых клиентом ‘ Стоимость товара хранится в переменной Стоимость If UserForm1.CheckBox1.Value = True Then Сумма=Стоимость-Стоимость*0.05 Else Cумма=Стоимость 1) REM Предположим, что Тариф – это установленный тариф, а Время ‘–отработанное время. Время и тариф вводятся в поля ввода ‘соответственно вTextBox1 и TextBox2. Зарплата рассчитывается по ‘формуле Тариф*Время. Напишем программу для вывода в форму ‘рассчитанной зарплаты. Label4 – надпись, подготовленная для ‘вывода значения зарплаты If IsNumeric(TextBox1.Text)=True And _ IsNumeric(TextBox2.Text)=True Then Тариф=TextBox1.Text Время=TextBox2.Text Label4.Caption=Тариф*Время В первом примере работа ведется с пользовательской формой номер один. Переменной Фамилия присваивается содержимое поля ввода номер один. Затем осуществляется проверка, было ли что-либо введено в поле ввода (не пуста ли переменная Фамилия ). Если переменная Фамилия пуста, то на экран выводится окно сообщения. Во втором примере – первые строки, начинающиеся со слова REM и апострофов, – это комментарии, объясняющие назначения переменных. С помощью условного оператора определяется сумма, выплачиваемая клиентом. В третьем примере осуществляется проверка того, введены ли в поля ввода числа. Если в два поля введены числа, то переменным присваиваются значения полей ввода и надписи присваивается значение результата умножения тарифа на время. 1) Оператор безусловного перехода GoTo предназначен для задания перехода на указанную строку внутри программы. Синтаксис: GoTo Строка Обязательный аргумент Строка может быть любой меткой строки или номером строки. If IsNumeric(TextBox1.Text)=False Then GoTo Ошибка Ошибка: MsgBox “Ошибка при вводе чисел!” В приведенном примере выполняется проверка того, введено ли число в поле ввода номер один. Если введено не число, то осуществляется переход на строку с меткой Ошибка и на экран выводится сообщение. 2) Оператор цикла For/To/Next предназначен для программирования повторяющихся фрагментов, т.е. для описания циклических алгоритмов. Синтаксис: For переменная=M1 To M2 [Step M3] операторы M1, M2, M3 – выражения. Оператор цикла повторяет выполнение группы операторов, пока переменная (счетчик) изменяется от начального значения М1 до конечного М2 с указанным шагом М3. Если шаг не указан, то он полагается равным 1. Фамилия = Sheets(“Сотрудники”).Cells(I,1) UserForm1.ComboBox1.AddItem Фамилия В приведенном примере предполагается, что на листе «Cотрудники» в первом столбце записаны фамилии сотрудников, которые нужно внести в список поля со списком номер один пользовательской формы номер один. Алгоритм работы программы: 1) Переменной I присваивается значение 2. 2) Переменной Фамилия присваивается значение ячейки А(I,1), расположенной на листе «Сотрудники». (При первом выполнении цикла это ячейка А(2,1)) 3) В список поля со списком ComboBox1 добавляется элемент из переменной Фамилия. 4) К значению переменной I добавляется 1 (если шаг не указан, то он полагается равным 1). Выполняется проверка, не превысила ли величина I 10 (конечного значения переменной I, в примере М3=10)? Если величина I еще меньше или равна 10, то выполняются пункты 2-4, в противном случае работа цикла заканчивается. Таким образом, приведенная программа позволяет заполнить данными список поля со списком ComboBox1. Основные алгоритмы, используемые при решении Основные алгоритмы рассмотрим на следующем примере. В выполнении работы по договору участвовали сотрудники разных отделов. В таблице, на листе «Лист1» представлены данные о количестве отработанных часов каждым из сотрудников (рис.8). Рис.8.Данные о количестве отработанных часов сотрудниками фирмы Эти операторы сравнивают два выражения для определения равны ли они, и если нет то, как они отличаются. Is , IsNot и Like детально обсуждаются на отдельных страницах справки. Отношения операторов сравнения обсуждаются на этой странице. Result = expression1 comparisonoperator expression2 result = object1 object2 result = string Like pattern result expression comparisonoperator object1 , object2 string pattern В следующей таблице приводится список операторов сравнения и условий, определяющих, является ли result True или False .
|