Главная » Функции VBA »
28 Апрель 2011 129128 просмотров
- ABS() — эта функция возвращает абсолютное значение переданного ей числа (то же число, но без знака). Например, ABS(3) и ABS(-3) вернут одно и то же значение 3.
- Int(), Fix() и Round()позволяют по разному округлять числа:
- Int() возвращает ближайшее меньшее целое;
- Fix() отбрасывает дробную часть;
- Round() округляет до указанного количества знаков после запятой.
Однако Round может вернуть не совсем ожидаемый результат, т.к. функция применяет финансовое округление. По правилам данного округления если за последней к округлению цифрой стоит 5, то округляемую цифру увеличивают в том случае, если она нечетная и уменьшают, если четная.
Математическое же округление всегда округляет цифру в большую сторону, если за ней идет цифра 5 и выше, и отбрасывает остаток если 4 и меньше.
Т.е. если мы выполним такую строку кодато результатом будет 2,5, хотя предполагалось получить 2,51. Поэтому порой для округления лучше использовать Format:
MsgBox Format(2.505, "#,##0.00")
но в этом случае мы получим не число в чистом виде, а текст. И если нужно именно число, то придется производить дополнительные преобразования:
MsgBox CDbl(Format(2.505, "#,##0.00"))
Так же, для математического округления, можно использовать и такой вариант:
MsgBox Application.Round(2.505, 2)
Но здесь стоит учитывать, что это не чистый VB и этот метод сработает только в Excel, т.к. по сути мы обращаемся к встроенной в Excel функции округления ОКРУГЛ(ROUND), которая применяет именно математическое округление.
- Rnd и команда Randomize используются для получения случайных значений (очень удобно для генерации имен файлов и в других ситуациях). Перед вызовом функции Rnd() необходимо выполнить команду Randomize для инициализации генератора случайных чисел.
Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long lMinNum = 1: lMaxNum = 100 Randomize lRundNum = Int(lMinNum + (Rnd() * lMaxNum)) MsgBox lRundNum
- Sgn() — позволяет вернуть информацию о знаке числа. Возвращает 1, если число положительное, -1, если отрицательное и 0, если проверяемое число равно 0.
- Mod() — Делит два числа и возвращает только остаток. Например, выражение 8 Mod 3 вернет число 2, т.к. без остатка(в виде дроби у результата деления) 8 делится на 3 только до 2-х(8 / 3 = 2,66666666666667).
При этом функция Mod учитывает и знак числа — если первое число или оба числа отрицательные, то результатом будет отрицательное число. Если же отрицательное только второе число — то результат будет положительным числом.
При попытке получить остаток при делении чисел с плавающей запятой результат может быть не тем, который ожидается, потому что перед выполнением деления оба числа округляются по математическим законам(5 и выше до большего, 4 и ниже — до меньшего). Например, выражение 8 Mod 3.5 вернет 0, а выражение 8 Mod 3.4 — 2.
Приведенные ниже математические функции 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.
Функция Sgn
Sgn(Number)
Функция Sgn (Sign) определяет знак аргумента
Возвращаемое значение
Функция возвращает величину с типом данных Variant(Integer) следующим образом:
Положительный аргумент | Возвращается 1 |
Отрицательный аргумент | Возвращается -1 |
0 | Возвращается 0 |
Параметры
Number | Обязательный аргумент представляет собой любое выражение, оцениваемое как число. |
Если аргумент не может быть оценен как число, генерируется ошибка времени исполнения Type mismatch
Пример
' Определяем знак числа Dim Znak Znak=Sgn(77) ' возвращает 1 Znak=Sgn(-10) ' возвращает -1 Znak=Sgn(0) ' возвращает 0
Категория
Математические функции
Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
2013_Lektsia_VBA-1.doc
Скачиваний:
25
Добавлен:
29.05.2015
Размер:
1.25 Mб
Скачать
Таблица 2
Функция |
Пример использования |
Описание |
Тип |
Abs |
Abs(x) |
Модуль числа |
Совпадает |
Atn |
Atn(x) |
Арктангенс |
Double |
Cos |
Cos(x) |
Косинус |
Double |
Exp |
Exp(x) |
Экспоненциальная |
Double |
Fix |
Fix(x) |
Возвращает |
Integer |
Int |
Int(x) |
Возвращает |
Integer |
Log |
Log(x) |
Натуральный |
Double |
Rnd |
Rnd |
Генерируется от 0 до 1 |
Single |
Sgn |
Sgn(x) |
Знак числа |
Integer |
Sin |
Sin(x) |
Синус числа |
Double |
Sqr |
Sqr(x) |
Квадратный |
Double |
Tan |
Tan(x) |
Тангенс |
Double |
Дополнение к основным математическим
функциям VBA:
-
Logn(x)
= Log(x)
/ Log(n) -
Для
перевода x
из градусов в радианы: x
= x
* π / 180 -
IsNumeric
()– встроенная функцияVBA– возвращаетTrue, если
ее аргумент является числом (строка),
иFalse– в противном
случае. -
Val
() – встроенная функцияVBA— преобразует переданную ей строку в
число. -
InputBox
() – выдает запрос на ввод значения;
возвращает строковое значение.
Примеры ввода и вывода значений
Ввод:
-
x=5.7
(оператор присваивания); -
x
= Worksheets(1).Range(«A1″).Value
(значение считывается из ячейки А1); -
x
= InputBox(«Enter
Number:
«, «Calculate
Factorial»)(создается окно ввода значений переменнойхи указываются соответствующие
комментарии).
Рис.
20. Окно ввода значений
Вывод:
-
Cells(1,2).Value=5
(присваивает
ячейке В1 текущего рабочего листа
активной рабочей книги значение 5); -
Worksheets(1).Range(«A1:B2»).Value
= 10 (присваивание
блоку ячеек значения, равного 10); -
Range(«D15″).Value=»Test»
(присваивание ячейке текущего
рабочего листа активной рабочей книги
значения Test);
MsgBox
(x)
(создание окна сообщений, пример
результата см. рис. 21).
Рис. 21. Результат
выполнения оператора вывода MsgBox (x)
Примеры на использование обращений
к функции и процедуре
Пример
1:
Sub
Call_Function()
Dim
var1
As Integer
Dim
var2 As
Integer
Dim
var3 As
Integer
var1 = 5
var2 = 10
var3 = Multiply(var1,var2)
MsgBox (var3)
End
Sub
________________________________________________
Function
Multiply(ByVal
var1 As
Integer,
ByVal
var2 As
Integer)
Multiply
= var1
* var2
End
Function
Значение строк программы (пример 1)
Таблица 3
Строка |
Назначение строки |
Sub |
начало процедуры с указанием |
Dim Dim Dim |
блок описания (представляется |
var1 var2 = 10 |
блок ввода (присваивается |
var3 |
переменной |
MsgBox |
оператор вывода (вызывается |
End |
конец |
___________________________ |
граница |
Function |
начало функции с указанием |
Multiply = |
Результат |
End |
Конец |
Пример 2:
Sub
DDDD()
Dim
x
As Double
Dim
y As
Double
Dim
z As
Double
x
= 1.1
y
= 2.2
MsgBox (x)
MsgBox (y)
TTTT x,y
вызываем |
MsgBox
(y)
MsgBox
(x)
z=
FFF(x)
MsgBox
(z)
End
Sub
_______________________________
Function
FFF(ByVal
x As
Double)
FFF = 1/x^2
End
Function
______________________________________
Sub
TTTT(ByVal
x As
Double, ByRef
y As
Double)
процедуре |
MsgBox (y)
y=x+y
MsgBox (y)
x=5.5
MsgBox (x)
End
Sub
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Математические функции (Visual Basic)
Visual Studio 2013
Методы класса Math предоставляют тригонометрические, логарифмические и других общих математические функции.
Заметки
В следующей таблице перечислены методы класса Math . Можно использовать их в программе Visual Basic.
Метод .NET Framework |
Описание |
Abs |
Возвращает абсолютное значение числа. |
Acos |
Возвращает угол, косинус которого равен указанному числу. |
Asin |
Возвращает угол, синус которого равен указанному числу. |
Atan |
Возвращает угол, тангенс которого равен указанному числу. |
Atan2 |
Возвращает угол, тангенс которого равен отношению двух указанных чисел. |
BigMul |
Возвращает полный продукт 2 32 разрядных чисел. |
Ceiling |
Возвращает наименьшее целое значение, которое меньше или равно указанному Decimal или Double. |
Cos |
Возвращает косинус указанного угла. |
Cosh |
Возвращает гиперболический косинус указанного угла. |
DivRem |
Возвращает частное 2 32 или 64 разрядного разрядных знаковых целых чисел, а также возвращает остаток в параметре вывода. |
Exp |
Возвращает e (основание натуральных логарифмов), возведенное в заданную степень. |
Floor |
Возвращает наибольшее целое число, которое меньше или равно числу указанного типа Decimal или Double. |
IEEERemainder |
Возвращает остаток от деления, результаты из указанного числа другим указанным количеством. |
Log |
Возвращает естественный ( e) базового логарифм заданного числа или логарифм заданного числа в определенной базе. |
Log10 |
Возвращает логарифм с основанием 10 указанного числа. |
Max |
Возвращает большее 2 чисел. |
Min |
Возвращает меньшее из двух чисел. |
Pow |
Возвращает указанное число, возведенное в указанную степень. |
Round |
Возвращает значение Decimal или значение Double, округленное до разным значений или с указанным количеством цифр. |
Sign |
Возвращает значение типа Integer, показывающее знак числа. |
Sin |
Возвращает синус указанного угла. |
Sinh |
Возвращает гиперболический синус указанного угла. |
Sqrt |
Возвращает квадратный корень из указанного числа. |
Tan |
Возвращает тангенс указанного угла. |
Tanh |
Возвращает гиперболический тангенс указанного угла. |
Truncate |
Вычисляет неотъемлемую часть номера, определенных в Decimal или Double. |
Для использования этих функций без уточнения импортировать пространство имен Math в проект, добавив следующий код в начало файла источника:
Imports System.Math
Пример
В этом примере метод Abs класса Math используется для вычисления абсолютного значения числа.
‘ Returns 50.3.
Dim MyNumber1 As Double = Math.Abs(50.3)
‘ Returns 50.3.
Dim MyNumber2 As Double = Math.Abs(-50.3)
В этом примере метод Atan класса Math используется для вычисления значения числа пи.
Public Function GetPi() As Double
‘ Calculate the value of pi.
Return 4.0 * Math.Atan(1.0)
End Function
В этом примере метод Cos класса Math используется для возврата косинуса угла.
Public Function Sec(ByVal angle As Double) As Double
‘ Calculate the secant of angle, in radians.
Return 1.0 / Math.Cos(angle)
End Function
В этом примере метод Exp класса Math используется для возврата числа e, возведенного в степень.
Public Function Sinh(ByVal angle As Double) As Double
‘ Calculate hyperbolic sine of an angle, in radians.
Return (Math.Exp(angle) — Math.Exp(-angle)) / 2.0
End Function
В этом примере метод Log класса Math используется для возврата натурального логарифма числа.
Public Function Asinh(ByVal value As Double) As Double
‘ Calculate inverse hyperbolic sine, in radians.
Return Math.Log(value + Math.Sqrt(value * value + 1.0))
End Function
В этом примере метод Round класса Math используется для округления числа до ближайшего целого числа.
‘ Returns 3.
Dim MyVar2 As Double = Math.Round(2.8)
В этом примере метод Sign класса Math используется для определения знака числа.
‘ Returns 1.
Dim MySign1 As Integer = Math.Sign(12)
‘ Returns -1.
Dim MySign2 As Integer = Math.Sign(-2.4)
‘ Returns 0.
Dim MySign3 As Integer = Math.Sign(0)
В этом примере метод Sin класса Math используется для возврата синуса угла.
Public Function Csc(ByVal angle As Double) As Double
‘ Calculate cosecant of an angle, in radians.
Return 1.0 / Math.Sin(angle)
End Function
В этом примере метод Sqrt класса Math используется для вычисления квадратного корня числа.
‘ Returns 2.
Dim MySqr1 As Double = Math.Sqrt(4)
‘ Returns 4.79583152331272.
Dim MySqr2 As Double = Math.Sqrt(23)
‘ Returns 0.
Dim MySqr3 As Double = Math.Sqrt(0)
‘ Returns NaN (not a number).
Dim MySqr4 As Double = Math.Sqrt(-4)
В этом примере метод Tan класса Math используется для возврата тангенса угла.
Public Function Ctan(ByVal angle As Double) As Double
‘ Calculate cotangent of an angle, in radians.
Return 1.0 / Math.Tan(angle)
End Function
Требования
Класс: Math
Пространство имен: System