2.5 Функции в vba
В VBA используются следующие виды функций:
— математические встроенные функции;
— математические функции, не представленные в VBA;
— функции форматирования данных;
— функции преобразования типов
2.5.1 Математические встроенные функции
Таблица 2 — Встроенные математические функции 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) | Случайное число
из интервала [0,1). |
Sgn (x) | Возвращает +1, если значение параметра положительно, -1, если отрицательное, 0, если 0 |
Fix (x) | Возвращает результат округления выражения с плавающей точкой до целой части. В случае отрицательного параметра возвращает ближайшее большее отрицательное число |
Int (x) | Возвращает результат округления выражения с плавающей точкой до целой части. В случае отрицательного параметра возвращает ближайшее меньшее отрицательное число |
2.
5.2 Математические функции, не представленные в vbaТаблица 3 — Математические функции, непредставленные в VBA
Функция | Возвращаемое значение |
Log(X)/Log(10) | lg(х) – возвращает десятичный логарифм от значения числового выражения |
Atn | arcsin (x) – возвращает арксинус угла от значения параметра, заданного в радианах |
Atn | arccos (x) – возвращает арккосинус угла от значения параметра, заданного в радианах |
Cos (x)/Sin (x) | ctg (x) — возвращает котангенс угла от значения параметра, заданного в радианах |
Значение числа π | Pi = 4 * Atn (1) |
2.
5.3 Функция форматирования данныхДля того чтобы представить выражение отформатированным в специфицированном формате, необходимо воспользоваться функцией Format. Она возвращает значение типа Variant (String), содержащее выражение, отформатированное согласно указанным спецификациям.
Синтаксис:
Format (выражение [ , “Имя формата (или символ формата)“])
Именованные числовые форматы показаны в таблице 4.
Таблица 4 — Именованные числовые форматы
Имя формата | Описание |
General Number | Число без разделителя тысяч |
Currency | Отображает две цифры справа от десятичной точки |
Fixed | Отображает одну цифру слева и две справа от десятичной точки |
Standard | Отображает одну цифру слева и две справа от десятичной точки и выводит разделитель тысяч |
Percent | Отображает число в виде процентов и выводит две цифры справа от десятичной точки |
Scientific | Использует формат с плавающей десятичной точкой |
Yes/No | Отображает No, если число равно 0, и Yes – в противном случае |
True/False | Отображает False, если число равно 0, и True – в противном случае |
On/Off | Отображает Off, если число равно 0, и On – в противном случае |
Пользовательские
числовые форматы показаны в таблице 5.
2, “##.###”)
. (точка)
Резервирует позицию десятичного разделителя. Указание точки в строке формата определяет, сколько разрядов необходимо отображать слева и справа от десятичной точки.
Продолжение таблицы 5
E+,E-, e+, e- | Разделитель мантиссы и порядка в экспоненциальном формате. Пример. Debug.Print Format (sin(x) * exp(5), “#.###e+##”) |
% | Резервирует процентное отображение числа Пример. Debug.Print Format (0.5, «#.%») (отобразится 50 %) |
d,m,y | Резервирует позицию при выводе дня, месяца, года в категории форматов Data Пример. Новые вопросы
ОтветыПохожие вопросы
Эскадра капитана Блада стоит в гавани Тортуги и снаряжается в очередной поход. На разные корабли нужно разное:
В декартовой системе координат прямоугольник задан координатами двух противоположных вершин.Для заданных точек определите лежат ли о ни внутри прямоугольника или на его границы
C++. 1)Значительные материальные затраты на покупку сетевого оборудования, программного обеспечения, на прокладку соединительных кабелей и обучение персонала 2)Сеть ограничивает возможности перемещения компьютеров, подключе…
Дан одномерный массив, содержащий целые числа. Использовать дополнитель
Помогите выполнить 3 и 4 задание. Математика Литература Алгебра Русский язык Геометрия Английский язык Химия Физика Биология Другие предметы История Обществознание Окружающий мир География Українська мова Українська література Қазақ тiлi Беларуская мова Информатика Экономика Музыка Право Французский язык Немецкий язык МХК ОБЖ Психология Функция журнала в excel (vba) — не дает мне правильного ответа Вместо функции Int используйте функцию cLng. Пример Int(99.2) '= 99 Целое(99,5) '= 99 Целое число (99,8) '= 99 но cLng(99.2) '= 99 cLng(99,5) '= 100 cLng(99,8) '= 100 , так как компьютеры и калькуляторы рассчитывают числа, а не алгебраические, вероятно, есть проблема с точностью вычислений и Обратите внимание, что Excel — это программа для числовых вычислений, и значения типа Обратите внимание, что это не ошибка, а характер числовых вычислений, которые никогда не бывают точными, а только точными, в то время как алгебраические вычисления могут быть точными. 92 , где DoubleA = 0,9999999999 DoubleB = 1.0000000001 , затем Если вам нужно делать это часто, удобно использовать для этого функцию: Option Explicit
Открытая функция IsDoubleValueTheSame (DoubleA As Double, DoubleB As Double, Optional Digits As Long = 12) As Boolean
IsDoubleValueTheSame = (DoubleA - DoubleB) ^ 2 < (10 ^ -Digits) ^ 2
Конечная функция
и назовите его как Debug. Итак, вернемся к исходному примеру: Debug.Print Log(1000) / Log(10) = 3 'false Debug.Print IsDoubleValueTheSame(Log(1000)/Log(10), 3, 15) 'true Debug.Print IsDoubleValueTheSame(Log(1000)/Log(10), 3, 16) 'false , что означает Дополнительная информация об этом:
Несоответствие между рабочим листом Excel и функциями VBA INT(LOG())Задавать вопрос спросил Изменено 7 лет, 9 месяцев назад Просмотрено 2к раз В стандартном модуле кода Excel VBA я создал пользовательскую формулу Публичная функция MyLog10 (ByVal dbl_Input As Double) As Double
MyLog10 = Журнал (dbl_Input) / Журнал (10)
Конечная функция
Протестировано на значение 1000 и получило точный результат 3. Sub TestIntMyLog10()
Debug.Print MyLog10(1000) 'Результат 3 (точный)
Debug.Print Int(MyLog10(1000)) 'Результат 2 (неточный)
Debug.Print Fix(MyLog10(1000)) 'Результат 2 (неточный)
Конец сабвуфера
Что еще более удивительно, моя пользовательская функция Любое объяснение этого несоответствия VBA/Worksheet (вероятно, ошибка)? Кроме того, добавление очень небольшого числа (1E-12) к выходным данным пользовательского VBA Debug.Print Int (Log10(1000)+1E-12) 'Результат 3 (точный)
After trying multiple type conversions, the solution was found: it is using a Print Int(MyLog10Decimal(1000)) 'Результат 3 (точный)
Debug.Print Int(MyLog10Decimal(1000)) 'Результат 3 (точный)
Debug.Print Fix(MyLog10Decimal(1000)) 'Результат 3 (точный)
' ** тестовый образец: входное число 0,001
'используя тип вывода журнала double: Fix() дает неверные результаты
Debug.Print MyLog10(0.001) 'Результат -3 (точный)
Debug.Print Int(MyLog10(0.001)) 'Результат -3 (точный)
Debug.Print Fix(MyLog10(0.001)) 'Результат -2 (неточный)
'использование десятичного типа вывода журнала: Int() и Fix() дают правильные результаты
Debug.Print Int(MyLog10Decimal(0.001)) 'Результат -3 (точный)
Debug.Print Int(MyLog10Decimal(0.001)) 'Результат -3 (точный)
Debug.Print Fix(MyLog10Decimal(0.001)) 'Результат -3 (точный)
Конец сабвуфера Небольшое пояснение. VBA не поддерживает тип Decimal в качестве параметра/вывода функции, поэтому он объявлен Variant с примененным к нему преобразованием CDec. До сих пор он был протестирован на нескольких входных данных (> 1 и < 1) и возвращает правильные результаты. |
Перед вызовом функции
надо использовать оператор Randomize
(рандомизации) – запуск генератора
псевдослучайных чисел)
x-ln2x (интервал от 1 до 10) ШАГ 0.5 нужно написа… -reshimne.ru
програмирование
В то время как
Итак,
Print IsDoubleValueTheSame(0.9999999999, 1.0000000001, 9) 'true
Debug.Print IsDoubleValueTheSame(0.9999999999, 1.0000000001, 10) 'ложь
Удивительно, но когда функция
Ниже приведен фрагмент кода, содержащий универсальное решение VBA и тест Sub
Print Int(MyLog10Decimal(1000)) 'Результат 3 (точный)
Debug.Print Int(MyLog10Decimal(1000)) 'Результат 3 (точный)
Debug.Print Fix(MyLog10Decimal(1000)) 'Результат 3 (точный)
' ** тестовый образец: входное число 0,001
'используя тип вывода журнала double: Fix() дает неверные результаты
Debug.Print MyLog10(0.001) 'Результат -3 (точный)
Debug.Print Int(MyLog10(0.001)) 'Результат -3 (точный)
Debug.Print Fix(MyLog10(0.001)) 'Результат -2 (неточный)
'использование десятичного типа вывода журнала: Int() и Fix() дают правильные результаты
Debug.Print Int(MyLog10Decimal(0.001)) 'Результат -3 (точный)
Debug.Print Int(MyLog10Decimal(0.001)) 'Результат -3 (точный)
Debug.Print Fix(MyLog10Decimal(0.001)) 'Результат -3 (точный)
Конец сабвуфера 