Приведенные ниже математические функции vba позволяют производить тригонометрические вычисления (нахождение sin, cos и так далее), обрабатывать числовые значения на предмет получения целой части от дробного, округления или генерации случайных чисел.
Если переданный параметр для следующих математических функций vba не будет распознан как числовое значение, возникнет ошибка.
ABS(num) – Функция возвращает значение числа по модулю.
Exp(num) – Функция позволяет получить значение экспоненты, передаваемый параметр (максимальное значение ровно 709 782712893) является степенью, в которую нужно возвести экспоненту. Соответственно, если параметр равен 1, то мы получить чистое значение экспоненты.
Fix(num) – Функция возвращает целую часть от переданного дробного значения. Если переданное значение является отрицательным, то возвращается ближайшее отрицательное целое число, большее, либо равное указанному.
Int(num) – Математическая функция vba возвращает целую часть от переданного дробного значения. Если переданное значение является отрицательным, то возвращается ближайшее отрицательное целое число, меньшее, либо равное указанному.
Rnd(random) – Функция вернет число, входящее в диапазон от 0 до 1 в случайном порядке, при этом, само число 1 не входит в диапазон, а 0 – входит. Перед вызовом функции надо прописывать конструкцию Randomize, которая отвечает за включение генератора случайных чисел.
В зависимости от значения переданного параметра random, данная математическая функция vba работает следующим образом:
- Параметр отсутствует или больше 0 — Генерация следующего случайного числа в последовательности. Повторный запуск программы генерирует аналогичную последовательность.
- Параметр меньше 0 – Происходит генерация одного и того же числа, опираясь на переданный аргумент.
- Параметр равен 0 — Происходит генерация одного и того же числа, опираясь на число из предыдущего вызова.
Round(num, [accr]) — Округление заданного числа (num) до заданной точности (accr).
Sgn(num) – Данная математическая функция vba позволяет узнать знак числа, переданного как аргумент. Функция vba вернет следующие значения:
- 0 – Число равно 0
- -1 – Число является отрицательным
- 1 – Число является положительным.
Sql(num) – Квадратный корень из переданного числового параметра num.
Следующие математические функции vba являются тригонометрическими. В качестве параметра для большинства указывается значение угла в радианах. Для перевода градусов в радианы используется формула:
Угол (в радианах) = угол (в градусах) * pi / 180, где pi = 3.14159265358979
Atn(par) – Арктангенс переданного числа (угол в радианах), функция вернет значение в диапазоне от -pi/2 до pi/2 радиан
Cos(par) — Косинус переданного числа (угол в радианах), функция вернет значение в диапазоне от -1 до 1.
Sin(par) — Синус переданного числа (угол в радианах), функция вернет значение в диапазоне от -1 до 1.
Tan(par) — Тангенс переданного числа (угол в радианах).
Log(par) – Натуральный логарифм переданного числа.
Я не буду приводить примеры для всех приведенных выше математических функций VBA, а приведу только один пример кода для функций sin и cos. Откройте редактор VBA (комбинация клавиш Alt + F11), добавьте в проект новый модуль (меню Insert/Module). В моем случае имя модуля – module3, в редакторе кода для заданного модуля пропишите следующие строки:
Sub Module3() Dim oWord As Object, oDoc As Object, oSel As Object, oFont As Object Dim i As Integer, j As Integer i = 0: j = 0 Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add Set oSel = oWord.Selection oWord.Visible = True Set oFont = oSel.Font With oFont .Size = 15 .Name = "Times New Roman" .Bold = True .ColorIndex = 2 End With oSel.TypeText "Синус угла: от 0 до 360 с шагом 10" ' математические функции vba With oFont .Size = 12 .Bold = False .Bold = True .ColorIndex = 0 End With oSel.TypeParagraph oSel.TypeParagraph Do While i <= 360 Dim my_var As String my_var = Radianus(i) oSel.TypeText Sin(my_var) & vbTab & vbTab & "(" & i & ")" oSel.TypeParagraph i = i + 10 Loop With oFont .Size = 15 .Name = "Times New Roman" .Bold = True .ColorIndex = 2 End With oSel.TypeParagraph oSel.TypeParagraph oSel.TypeText "Косинус угла: от 0 до 360 с шагом 10" ' математические функции vba With oFont .Size = 12 .Bold = False .Bold = True .ColorIndex = 0 End With oSel.TypeParagraph oSel.TypeParagraph Do While j <= 360 my_var = Radianus(j) oSel.TypeText Cos(my_var) & vbTab & vbTab & "(" & j & ")" oSel.TypeParagraph j = j + 10 Loop End Sub Function Radianus(c) Dim m_rad, m_pi m_pi = 3.14159265358979 Radianus = c * m_pi / 180 End Function
В данном случае мы создаем новый документ Word, добавляем в него форматированный (объект Font) текст, содержащий параметры значений для синуса и косинуса. Я выбрал диапазон значений от 0 до 360 градусов, используя цикл vba do…loop.
VBA Math Functions help us to perform arithmetic operations and complex mathematical operations. These are Abs, Atn, Cos, Exp, Fix, FormatNumber, FormatCurrency, FormatPercent, Int, Log, Randomize, Rnd, Round, Sgn, Sin, Sqr, Tan, etc. These functions are Built-In functions. We can use these VBA Math & Trig functions in either procedure or function. These functions we use in the VBA editor window in Excel. These Mathematical functions you can use any number of times in VBA macro codes.
List of Math Functions in Excel VBA:
Here are the list of Math functions. And also find its description, syntax and return type. We can use these multiple Math and Trig functions in one statement.
Function | Description | Syntax | Returns |
---|---|---|---|
VBA Abs | VBA Abs function returns an absolute value of a number. | Abs(Number) | Variant |
VBA Atn | VBA Atn function returns the arctangent of a number in radians, not degrees. | Atn(Number) | Double |
VBA Cos | VBA Cos function returns the cosine value of an angle in radians. | Cos(Number) | Double |
VBA Exp | VBA Exp function returns an exponential value for a specified number. | Exp(Number) | Double |
VBA Fix | VBA Fix function returns the integer portion of a number. | Fix(Number) | Double |
VBA FormatNumber | VBA FormatNumber function converts the given expression as formatted number. | FormatNumber(Expression,[NumDigitsAfterDecimal],[IncludeLeadingDigit],[UseParentsForNegativeNumbers],[GroupDigits]) | String |
VBA FormatCurrency | VBA FormatCurrency function converts the given expression as formatted currency. | FormatCurrency(Expression,[NumDigitsAfterDecimal],[IncludeLeadingDigit],[UseParentsForNegativeNumbers],[GroupDigits]) | String |
VBA FormatPercent | VBA FormatPercent function converts the given expression as formatted percentage. | FormatPercent(Expression,[NumDigitsAfterDecimal],[IncludeLeadingDigit],[UseParentsForNegativeNumbers],[GroupDigits]) | String |
VBA Int | VBA Int function rounds a specified number down to an integer. | Int(Number) | Double |
VBA Log | VBA Log function returns the natural logarithm of a specified number. | Log(Number) | Double |
VBA Randomize | VBA Randomize function changes the number in RND function which is used for random number generator. | Randomize([Number]) | N/A |
VBA Rnd | VBA Rnd function returns random number between 0 and 1. | Rnd([Number]) | Single |
VBA Round | VBA Round function rounds a number to a specified number of decimal digits. | Round(Number,[NumDigitsAfterDecimal]) | Double |
VBA Sgn | VBA Sgn function returns the sign of a number. | Sgn(Number) | Integer |
VBA Sin | VBA Sin function returns the sine value of an angle in radians. | Sin(Number) | Double |
VBA Tan | VBA Tan function returns the tangent value of an angle. | Tan(Number) | Double |
VBA Sqr | VBA Sqr function returns the square root of a number. | Sqr(Number) | Double |
Other Useful Resources:
Click on the following links of the useful resources. These helps to learn and gain more knowledge.
VBA Tutorial VBA Functions List VBA Arrays in Excel Blog
VBA Editor Keyboard Shortcut Keys List VBA Interview Questions & Answers
В VBAиспользуются следующие
виды функций:
— математические встроенные функции;
— математические функции, не представленные
в VBA;
— функции форматирования данных;
— функции преобразования типов
Математические встроенные функции
Функция |
Возвращаемое |
Abs (x) |
— абсолютная величина |
Atn (x) |
arctg(x) – арктангенс от |
Sin (x) |
sin(x) – возвращает синус |
Cos (x) |
cos(x) – косинус указанного |
Tan (x) |
tg(x) – возвращает тангенс |
Exp (x) |
ex– возвращает числоe, |
Log (x) |
ln(x) – возвращает натуральный |
Sqr (x) |
— возвращает квадратный корень числового |
Rnd (x) |
Случайное |
Sgn (x) |
Возвращает +1, если значение параметра -1, если отрицательное, 0, если 0 |
Fix (x) |
Возвращает |
Int(x) |
Возвращает |
Математические функции, не представленные в vba
Функция |
Возвращаемое |
Log(X)/Log(10) |
lg(х) |
Atn |
arcsin(x) – возвращает арксинус |
Atn |
arccos(x) – возвращает арккосинус |
Cos (x)/Sin (x) |
ctg(x) — возвращает котангенс |
Значение |
Pi = 4 * Atn (1) |
Функция форматирования данных
Для того чтобы представить выражение
отформатированным в специфицированном
формате, необходимо воспользоваться
функцией Format. Она возвращает
значение типаVariant(String),
содержащее выражение, отформатированное
согласно указанным спецификациям.
Синтаксис:
Format(выражение [ , «Имя
формата (или символ формата)»])
Именованные числовые форматы
Имя формата |
Описание |
GeneralNumber |
Число без |
Currency |
Отображает |
Fixed |
Отображает |
Standard |
Отображает |
Percent |
Отображает |
Scientific |
Использует |
Yes/No |
Отображает |
True/False |
Отображает |
On/Off |
Отображает |
Соседние файлы в папке Лаб. раб. VBA
- #
- #
- #
- #
- #
- #
Аннотация: Лекция посвящена описанию основных конструкций и принципов VBA. Подробно обсуждаются стандартные встроенные функции VBA и пользовательские процедуры и функции.
6.1. Встроенные математические функции
06-01-Математика.docm — пример к п. 6.1.
Вы хотите вычислить квадратный корень, округлить число или сделать с ним еще что-нибудь подобное? Для этого VBA имеет специализированные функции, вы можете найти их в табл. 6.1.
Функция | Описание |
---|---|
Abs | Абсолютное значение |
Atn | Арктангенс |
Cos | Косинус числа |
Exp | Возвращает число e (2.718282), возведенное в степень аргумента функции. |
Fix | Отбрасывает дробную часть числа и возвращает целую. В результате для положительных чисел получается число меньшее, чем входное (Fix(2.5) возвратит 2), для отрицательных — большее (Fix(-2.5) возвратит -2) |
Int | Отбрасывает дробную часть числа и возвращает целую. Для положительных получается число меньшее введенного (Int(2.5) возвратит 2), для отрицательных — так же меньшее (Int(-2.5) возвратит -3). |
Log | Возвращает натуральный логарифм числа |
Rnd | Возвращает случайное число типа Single, причем, это число находится между 0 и 1. Для инициализации генератора случайных чисел используйте директиву Randomize — ее надо вызвать до вызова Rnd. |
Sgn | Функция предназначена для определения знака числа. Если число положительное — она возвращает 1. Для нуля функция возвратит 0, для отрицательного числа -1. |
Sin | Синус |
Sqr | Квадратный корень |
Tan | Тангенс |
Давайте рассмотрим пример. Добавим в документ Microsoft Word кнопку, назовем ее cmd_Calc, надпишем ее как Вычисления и добавим следующий код (листинг 6.1.), иллюстрирующий работу рассмотренных функций.
Dim dblNumber As Double 'Переменная, используемая в вычислениях Dim varResult 'Переменная типа Variant dblNumber = Val(InputBox("Введите число")) 'Вычисляем абсолютное значение введенного числа 'Сначала присвоим результат переменной varResult 'Далее - выведем подписанный результат в окне 'сообщения, воспользуемся знаком "+" для 'конкатенации строк, в других случаях 'будем вызывать функции непосредственно 'в MsgBox'e 'Обратите внимание на то, что мы конвертируем 'числовые значения в строки с помощью функции Str varResult = Abs(dblNumber) MsgBox ("Абсолютное значение " + _ Str(dblNumber) + " равняется " + Str(varResult)) 'Арктангенс MsgBox ("Арктангенс " + _ Str(dblNumber) + " равняется " + _ Str(Atn(dblNumber))) 'Косинус MsgBox ("Косинус " + _ Str(dblNumber) + " равняется " + _ Str(Cos(dblNumber))) 'e в степени введенного числа MsgBox ("Число e в степени " + _ Str(dblNumber) + " равняется " + _ Str(Exp(dblNumber))) 'Функция Fix MsgBox ("Результат работы функции Fiх для " + _ Str(dblNumber) + " равняется " + _ Str(Fix(dblNumber))) 'Функция Int MsgBox ("Результат работы функции Int для " + _ Str(dblNumber) + " равняется " + _ Str(Int(dblNumber))) 'Натуральный логарифм MsgBox ("Натуральный логарифм " + _ Str(dblNumber) + " равняется " + _ Str(Log(dblNumber))) 'Получим несколько случайных чисел 'первое число - от 0 до 1 'второе - от 0 до 10. 'Третье - от 25 до 100 'Четвертое - целое от 0 до 34 Randomize MsgBox ("Группа случайных чисел: " + _ Str(Rnd()) + ", " + _ Str(Rnd() * 10) + ", " + _ Str(Rnd() * 75 + 25) + ", " + _ Str(Int(Rnd() * 34))) 'Функция Sgn MsgBox ("Результат работы Sgn для " + _ Str(dblNumber) + " равняется " + _ Str(Sgn(dblNumber))) 'Cинус MsgBox ("Синус " + _ Str(dblNumber) + " равняется " + _ Str(Sin(dblNumber))) 'Квадратный корень MsgBox ("Квадратный корень " + _ Str(dblNumber) + " равняется " + _ Str(Sqr(dblNumber))) 'Тангенс MsgBox ("Тангенс " + _ Str(dblNumber) + " равняется " + _ Str(Tan(dblNumber)))
Листинг
6.1.
Обработчик события Click кнопки cmd_Calc
Обратите внимание на алгоритм получения случайного числа, находящегося в определенном диапазоне, с помощью функции Rnd. Предположим, нам нужно получить случайное число от 15 до 40. Получим, для начала, число от 0 до 40. Очевидно, что для этого нам понадобится такой вызов: Rnd()*40.
Чтобы «поднять» уровень наименьшего случайного числа, возвращаемого выражением, до 15, сделаем следующее.
Во-первых, вычислим разность 40 и 15 — у нас получится 25. Значит, чтобы получить случайное число от 0 до 25, можно использовать вызов Rnd()*25.
Во-вторых, прибавим к полученному случайному числу 15. Теперь выражение для получения случайного числа от 15 до 40 выглядит так: Rnd()*25+15.
Проверим это высказывание на правильность. Функция Rnd, как известно, возвращает случайные числа от 0 до 1. Если функция возвратит 0 — результат вычисления выражения будет равен 15 (0*25+15). Если функция возвратит 1 — результат будет равен 40 (25*1+15). Промежуточные значения Rnd дадут искомые случайные числа между 15 и 40.
На рис. 6.1. вы можете видеть окно сообщения, содержащее результаты вызовов функции Rnd.
Рис.
6.1.
Окно сообщения, выводящее случайные числа
Выше мы работали, в основном, с числами, теперь поговорим о строковых переменных.
6.2. Строковые функции
06-02-Строковые функции.docm — пример к п. 6.2.
В табл. 6.2. вы можете найти информацию об основных строковых функциях VBA.
Функция | Описание |
---|---|
Len(string) | Возвращает длину строки. Например, длина строки «Добрый день» составляет 11 символов — учитывая пробел. Выходное значение имеет тип Long |
LCase(string) | Возвращает строку, все символы которой записаны в нижнем регистре. Например, строка «Привет» превратится в «привет» |
UCase(string) | Возвращает строку, все символы которой записаны в верхнем регистре. Например, для «Привет» мы получим «ПРИВЕТ» |
String(number, character) | Возвращает строку, состоящую из number символов character |
Left(string, length) | Возвращает length символов, начиная с первого левого символа строки string |
Right(string, length) | Возвращает length символов, начиная с самого правого символа строки string |
LTrim(string) | Возвращает строку, в которой вырезаны все пробелы слева |
RTrim(string) | Вырезает из строки все пробелы справа |
Trim(string) | Вырезает из строки все пробелы слева и справа |
Mid(string, start[, length]) | Вырезает из строки string с позиции start length символов |
Asc(string) | Возвращает ASCII-код первого символа строки |
Chr(charcode) | Возвращает символ, соответствующий коду символа |
Работа со строками традиционно считается сложным разделом программирования для начинающих, поэтому проиллюстрируем вышеописанные функции примерами.
Создадим документ Microsoft Word и добавим на него следующие кнопки табл. 6.3.
Обработчик нажатия кнопки cmd_Len (листинг 6.2.) будет содержать решение следующей задачи: сообщить пользователю длину введенного текста. Очевидно, для решения этой задачи нам понадобится функция Len.
'Переменная для хранения входной строки Dim str_InpStr As String 'Переменная для хранения найденной длины строки Dim lng_StrLen As Long str_InpStr = InputBox("Введите строку") 'Вычисляем длину строки lng_StrLen = Len(str_InpStr) MsgBox ("Длина введенной строки: _" + _ str_InpStr + "_ равняется " + Str(lng_StrLen) + _ " символам")
Листинг
6.2.
Пример использования функции Len
На рис. 6.2. вы можете видеть результат вычисления длины строки.
Рис.
6.2.
Результат вычисления длины строки
Теперь займемся конверсией символов — функциями LCase и UCase (листинг 6. 3.).
'Переменная для хранения входной строки Dim str_InpStr As String 'Переменная для хранения измененной строки Dim str_NewStr As String str_InpStr = InputBox("Введите текст") 'В str_NewStr окажется введеная строка 'в которой все прописные буквы заменены строчными str_NewStr = LCase(str_InpStr) MsgBox ("Измененная строка: " + str_NewStr) 'Теперь в str_NewStr будет та же строка 'в которой все буквы стали прописными str_NewStr = UCase(str_InpStr) MsgBox ("Измененная строка: " + str_NewStr)
Листинг
6.3.
Пример использования функций LCase и UCase
На очереди — вырезание символов — функции Mid, LTrim, Rtrim, Left, Right (листинг 6.4.) Среди этих функций наиболее мощной является Mid — используя ее, можно делать со строками очень много всего.
'Переменная для хранения входной строки Dim str_InpStr As String 'Переменная для хранения вырезанных символов Dim str_NewStr As String 'Зададим строку, с которой удобно будет работать str_InpStr = " Здравствуйте, Александр " 'Функции удаления пробелов 'При выводе строки ставим перед ее началом 'и концом символ "_" для того чтобы 'лучше было видно наличие 'или отсутствие пробелов MsgBox ("Мы работаем с такой строкой: " + _ "_" + str_InpStr + "_") 'LTrim - присваиваем результаты работы 'переменной и выводим информацию в MsgBox str_NewStr = LTrim(str_InpStr) MsgBox ("Результат работы LTrim: " + _ "_" + str_NewStr + "_") 'RTrim MsgBox ("Результат работы RTrim: " + _ "_" + RTrim(str_InpStr) + "_") 'Trim MsgBox ("Результат работы Trim: " + _ "_" + Trim(str_InpStr) + "_") 'Left - вырезаем из строки str_InpStr 12 'символов предварительно очистив ее 'от начальных пробелов str_NewStr = Left(LTrim(str_InpStr), 12) MsgBox ("Первые 12 символов слева: " + _ str_NewStr) 'Right - аналогично Вырезаем 9 символов справа str_NewStr = Right(RTrim(str_InpStr), 9) MsgBox ("Первые 9 символов справа: " + _ str_NewStr) 'Функция Mid - для начала выведем по одному символу 'со второй и пятнадцатой позиции строки 'преварительно очищенной от лишних пробелов 'в начале и в конце str_NewStr = Mid(Trim(str_InpStr), 2, 1) MsgBox ("Второй символ введенной строки: " + _ str_NewStr) str_NewStr = Mid(Trim(str_InpStr), 15, 1) MsgBox ("Пятнадцатый символ введенной строки: " + _ str_NewStr) 'Выведем 5 символов, начиная с 15 символа str_NewStr = Mid(Trim(str_InpStr), 15, 5) MsgBox ("Пять символов строки с 15-й позиции: " + _ str_NewStr)
Листинг
6.4.
Пример использования функций для вырезания символов
Теперь рассмотрим примеры работы функций Asc, Chr и функции String. Чтобы работать с функциями Asc и Chr нам нужно познакомиться с понятием таблицы символов ASCII.
ASCII расшифровывается как American Standard Code For Information Intercharge — американский стандартный код для обмена информацией. Каждый символ в ASCII закодирован восьмибитным кодом. В результате получается таблица, в которой каждому управляющему символу, цифре, букве латинского или национального алфавитов сопоставлен свой код. Коды записывают в различных представлениях — в основном — в шестнадцатеричном и десятичном. Мы будем пользоваться десятичной записью.
Мы не будем приводить здесь таблицу ASCII полностью, приведем лишь некоторые полезные коды и диапазоны кодов.
Коды в диапазоне 0-31 имеют управляющие символы. Символ возврата каретки (тот самый, который вставляется в документ при нажатии клавиши Enter ) имеет код 13.
Коды в диапазоне 32-127 имеют латинские символы, цифры, знаки препинания — эта часть таблицы остается постоянной для различных кодовых таблиц. Например, пробел имеет код 32, точка — 46. Диапазон 48-57 занимают цифры от 0 до 9, диапазон 65-90 занимают заглавные латинские буквы от A до Z, диапазон 97-122 — строчными буквы a-z.
В диапазоне 128-225 расположены символы национальной кодировки. В русифицированных версиях MS Windows обычно применяется кодовая страница MS Windows 1251. В ней коды 192-223 имеют заглавные буквы от А до Я, 224-255 — строчные буквы от а до я.
Используя коды символов можно вводить в документы (или записывать в файлы, создаваемые программно) символы, которые нельзя ввести с клавиатуры.
В коде обработчика Click для cmd_Asc создадим программу (листинг 6.5.), которая сначала запрашивает у пользователя ввод символа, после чего выводит его ASCII код, потом — ввод кода, после чего выводит соответствующий ему символ. Так же здесь мы посмотрим на то, как работает функция String:
'Переменная для хранения кода символа Dim num_AscNumber 'Переменная для хранения символа Dim str_Char 'Начало блока перевода кода в символ num_AscNumber = Val(InputBox("Введите код символа")) 'В переменной str_Char теперь хранится символ 'с кодом num_AscNumber str_Char = Chr(num_AscNumber) MsgBox (str_Char + " - символ с кодом " + _ Str(num_AscNumber)) 'Начало блока перевода символа в код str_Char = InputBox("Введите символ") 'Теперь в переменной num_AscNumber хранится 'Код символа, введенного в str_Char num_AscNumber = Asc(str_Char) MsgBox ("Символу " + str_Char + " соответствует код" + _ Str(num_AscNumber)) 'А теперь - пример функции String. 'выведем в окне сообщения 15 символов * MsgBox ("15 символов *: " + String(15, "*"))
Листинг
6.5.
Пример использования функций Chr, Asc, String