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

на главную

Жанры

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 * максимум))

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

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

Идеальный мир для Лекаря 19

Сапфир Олег
19. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 19

Сердце Дракона. Том 11

Клеванский Кирилл Сергеевич
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сердце Дракона. Том 11

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Девочка-яд

Коэн Даша
2. Молодые, горячие, влюбленные
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-яд

Авиатор: назад в СССР 14

Дорин Михаил
14. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 14

Метка драконов. Княжеский отбор

Максименко Анастасия
Фантастика:
фэнтези
5.50
рейтинг книги
Метка драконов. Княжеский отбор

Последний Паладин. Том 5

Саваровский Роман
5. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 5

Приручитель женщин-монстров. Том 5

Дорничев Дмитрий
5. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 5

Дайте поспать! Том II

Матисов Павел
2. Вечный Сон
Фантастика:
фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Дайте поспать! Том II

Целитель. Книга вторая

Первухин Андрей Евгеньевич
2. Целитель
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Целитель. Книга вторая

Табу на вожделение. Мечта профессора

Сладкова Людмила Викторовна
4. Яд первой любви
Любовные романы:
современные любовные романы
5.58
рейтинг книги
Табу на вожделение. Мечта профессора

Скрываясь в тени

Мазуров Дмитрий
2. Теневой путь
Фантастика:
боевая фантастика
7.84
рейтинг книги
Скрываясь в тени

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14