Чтение онлайн

на главную - закладки

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

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

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

Функция Возвращаемое значение

Abs ( число) Абсолютное значение числа

Atn ( число) Арктангенс числа

Cos ( число) Косинус числа

Ехр ( число) Число е в степени, равной заданному числу

Fix ( число) Целая часть числа (см. описание функции int)

int ( число) Целая часть числа. Функции intи Fix

по-разному действуют только на отрицательные числа: intвозвращает ближайшее меньшее целое, a Fix просто отбрасывает дробную часть числа

Log ( число) Натуральный логарифм числа, значение двойной точности

Rnd ( число) Случайное число, значение одинарной точности

Sgn ( число) 1, если число положительно, 0, если равно нулю, и - 1, если отрицательно

Sin ( число) Синус числа

sqr ( число) Квадратный корень числа

Tan ( число) Тангенс числа

Если вы не находите в VBA ту математическую функцию, которая вам нужна, не отчаивайтесь- можно сконструировать выражение или создать процедуру типа Function, которая решит нужную задачу.

Если вы знаете математику настолько, что можете сами разобраться с тригонометрическими функциями типа обратной к функции косеканса, мне, наверное, не нужно объяснять вам, как использовать тригонометрические функции. Однако вам будет не лишним знать, что в справке VBA есть нечто типа шпаргалки по таким функциям, в которой вы найдете и выражения для их вычисления. Чтобы добраться до этой шпаргалки, поищите раздел derived math functions (производные математические функции) в содержании справки. Этот раздел справки напомнит вам, например, что логарифм числах по основанию N вычисляется как Log (X) /Log (N).

Если вы предполагаете, что какая-то производная математическая функция понадобится в дальнейшем, сделайте ее частью своего математического арсенала, записав в виде процедуры типа Function, и сохраните в модуле с названием вроде МоиМатематическиеФункции. Тогда вы сможете при случае воспользоваться ею, как только в этом возникнет необходимость.

Округлять десятичные числа приходится часто, особенно при работе с денежными значениями. Как ни странно, VBA не предлагает прямого решения таких задач, но обсуждаемые ниже приемы помогут вам решить любые проблемы с округлением.

В VBA 6 есть функция Round (в VBA 5 такой функции нет), но дает она не слишком надежные результаты. Например, в результате выполнения оператора х = Round( 2.505, 2) значением переменной х будет 2.5, а не 2.51, как должно быть. Поэтому не используйте Round, если, конечно, вы не намереваетесь получить заведомо неправильные ответы.

Есть другой простой способ округления чисел в VBA, при котором используется функция Format: просто используйте эту функцию, задав подходящее значение аргумента формат, как показано в следующем примере (как использовать аргумент формат, см. выше в разделе "Создание собственных форматов");

sngОкругленное = Format(sngНеокругленное, "#,##0.00")

В VBA 6 для получения подобного результата можно использовать функцию FormatNumber:

sngOKpyгленное = FormatNumber(sngНеокругленное, 2)

В

обоих этих примерах значение sngНеокругленное округляется до двух знаков после запятой. Чтобы при округлении с помощью функции Format получить иное число знаков после запятой, измените число нулей после десятичной точки в аргументе формат. Например, значение "#,##0.0" для аргумента в результате даст округление до одного знака после запятой. При округлении с помощью функции FormatNumber просто измените число, задающее значение второго аргумента, на нужное.

Не забывайте, что переменная, в которую вы помешаете округленное значение, должна иметь тип String, Single, Double, Decimal, Currency или Variant, но никак не тип Integer или Long, поскольку тогда вы просто потеряете дробную часть числа.

Предположим теперь, что нужно округлить некоторое значение не в дробной части, а до целых определенного порядка (например, до сотен). В этом случае выражение немного усложняется, но нельзя сказать, чтобы слишком. Вот пример округления до сотен: sngOKpyrленное = Format(sngНеокругленное / 100, "#,##0.") * 100

Обратите внимание на то, что в данном случае строка для аргумента формат не имеет нулей справа от десятичной точки. Кроме того, неокругленное значение внутри функции Format делится на подходящую степень 10, а возвращаемый функцией результат умножается на ту же степень 10. Степень 10 должна быть равной порядку, до которого предполагается округление. В данном примере порядок равен 2, т.е. выполняется округление до сотен.

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

В VBA есть две встроенные команды для генерирования случайных чисел.

* Оператор Randomize. Используйте его, чтобы запустить генератор случайных чисел VBA. Не требуя аргументов, оператор Randomize запускает генератор, подавая ему на вход текущее системное время. Таким образом, гарантируется при каждом новом запуске новая последовательность случайных чисел.

* функция Rnd, Эта функция и поставляет случайные числа для использования в программе. Функция Rnd не имеет аргументов- вам нужно просто присвоить имя функции переменной или использовать Rnd в выражении. Возвращается значение с плавающей запятой (типа Single).

Числа с плавающей запятой часто используются в статистических и научных отчетах. Однако в некоторых ситуациях нужны случайные целые значения, если, например, необходима процедура, выбирающая случайным образом номер выигрышного билета. Чтобы преобразовать возвращаемое функцией Rnd значение в целое из определенного диапазона, используйте следующую формулу: случайное_целое = Int(минимум +(Rnd * максимум))

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

Поделиться:
Популярные книги

Газлайтер. Том 18

Володин Григорий Григорьевич
18. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 18

Секретарь лорда Демона

Лунёва Мария
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Секретарь лорда Демона

Жатва душ. Остров мертвых

Сугралинов Данияр
Фантастика:
боевая фантастика
рпг
5.20
рейтинг книги
Жатва душ. Остров мертвых

Кодекс Крови. Книга ХII

Борзых М.
12. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Крови. Книга ХII

Протокол "Наследник"

Лисина Александра
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Протокол Наследник

Найденыш

Шмаков Алексей Семенович
2. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Найденыш

Служанка. Второй шанс для дракона

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Служанка. Второй шанс для дракона

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Флеш Рояль

Тоцка Тала
Детективы:
триллеры
7.11
рейтинг книги
Флеш Рояль

Имперский Курьер. Том 2

Бо Вова
2. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 2

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Наследница долины Рейн

Арниева Юлия
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Наследница долины Рейн

Демон

Парсиев Дмитрий
2. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Демон

Ищу жену с прицепом

Рам Янка
2. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом