
- •Операції вводу-виводу.
- •2. Оператори
- •3. Змінні і типи даних
- •4. Константи
- •5.3. Оператор GoTo
- •6. Робота з циклами
- •8.2. Зона видимості процедур
- •8.5. Виклик і завершення роботи процедур
- •9.2. Функції перетворення і перевірки типів даних
- •9.3. Стрічкові функції
- •9.4. Функції для роботи з числовими значеннями
- •9.5. Функції для роботи з датою і часом
- •9.6. Функції для форматування даних
- •9.7. Функції для організації взаємодії з користувачем
- •9.8. Функції — замінники синтаксичних конструкцій
- •9.10. Функції для роботи з файловою системою
- •9.11. Інші функції vba
9.4. Функції для роботи з числовими значеннями
Функцій для роботи з числовими значеннями в VBA дуже багато. Використовуються вони рідше, ніж стрічкові функції, але у багатьох ситуаціях без них не обійтися. У Excel є свій власний потужний набір вбудованих функцій для роботи з числовими значеннями, які цілком доступні з VBA. Крім того, якщо у вікні Надбудови (меню Сервіс | Надбудови) установити прапорець навпроти рядка Пакет аналізу, в Excel буде доданий додатковий набір аналітичних наукових і фінансових функцій, а якщо в тому ж вікні встановити прапорець навпроти Analysis ToolPak — VBA, то ці функції стануть доступні з VBA (тільки усередині Excel, в якому установ-лена ця надбудова).
Далі приведені тільки універсальні функції VBA для роботи з числовыми значеннями. Ці функції доступні з будь-яких додатків VBA.
Abs() — ця функція повертає абсолютне значення переданого їй числа (те ж число, але без знаку). Наприклад, Abs(3) і Abs(− 3) повернуть одне і те ж значення 3. Зазвичай використовується тоді, коли нам потрібне визначити різницю між двома числами, але при цьому ми не знаємо, яке число — перше або друге — більше. Результат віднімання може бути і позитивним і негативним. Щоб він був тільки позитивним, використовується ця функція.
Int(), Fix() і Round() — дозволяють по-різному округлювати числа. Int() повертає найближче менше ціле, Fix() відкидає дробову частину, Round() округлює до вказаної кількості знаків після коми. При цьому Round() працює не зовсім правильно, в чому легко переконатися: MsgBox Round(2.505, 2). Тому на практиці для округлення краще використовувати Format()
MsgBox Format(2.505, "#,##0.00")
Rnd() і команда Randomize — використовуються для отримання випадкових значень (дуже зручно, наприклад, при генерації імен файлів). Звичайний синтаксис при застосуванні Rnd() виглядає так:
випадкове_число = Int(мінімум + (Rnd() * максимум))
MsgBox (Int(1 + (Rnd() * 100)))
Проте перед викликом функції Rnd() необхідно виконати команду Randomize для ініціалізації генератора випадкових чисел.
Sgn() — дозволяє повернути інформацію про знак числа. Повертає 1, якщо число позитивне, − 1, якщо негативне, і 0, якщо число, що перевіряється дорівнює 0.
9.5. Функції для роботи з датою і часом
Date(), Time(), Now() — повертають відповідно поточну системну дату, поточний системний час і дату і час одночасно. Встановити їх можна за допомогою однойменного відповідного оператора, наприклад, так:
Date = #5/12/2004#
DateAdd() — додає до дати вказану кількість років, кварталів, місяців і так далі до секунд.
DateDiff() — повертає різницю між датами (в одиницях від років до секунд).
DatePart() — дуже важлива функція, яка повертає вказану вами частина дати (наприклад, тільки рік, тільки місяць або тільки день тижня).
DateSerial() — створює значення дати на основі передаваних символьних значень. Те ж саме робить функція DateValue(), але при іншому форматі значень, що набувають. Аналогічним чином (для часу) працюють TimeSerial() і TimeValue().
Day() (а також Year(), Month(), Weekday(), Hour(), Minute(), Second()) — спеціалізовані замінники функції DatePart(), які повертають потрібну вам частину дати.
MonthName() — повертає ім'я місяця словами по його номеру. Значення залежить від регіональних налаштувань.
Timer() — повертає кількість секунд, що пройшли з півночі. Якщо треба отримати додаткові можливості роботи тактів/часом, то у вашому розпорядженні об'єктна модель Outlook. Наприклад за допомогою її можна отримати інформацію про свята і робочі/неробочі дні більшості країн світу.