- •Операції вводу-виводу.
- •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.2. Функції перетворення і перевірки типів даних
У програмах на VBA дуже часто доводиться перетворювати значення одного типу даних в інший.
Найчастіше для конвертації типів даних використовуються функції, ім'я яких складається з префікса 'C' (від слова Convert) і імені типу даних.
Перелік цих функцій наступний: CBool(), CByte(), CCur(), CDate(), CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr(). Проглянути, що у результаті вийшло, можна за допомогою функції TypeName(), яка повертає ім'я використовуваного типу даних, наприклад:
nVar1 = CInt(InputBox("Введіть значення"))
MsgBox TypeName(nVar1)
В даному випадку ця функція поверне "Integer".
Крім того, існує ще декілька корисних для конвертації функцій.
Str() — дозволяє перевести числове значення в стрічкове. Робить майже те ж саме, що і CStr(), але при цьому вставляє пропуск перед числами.
Val() — "витягує" з суміші цифр і букв тільки числове значення.
При цьому функція читає дані зліва направо і зупиняється на першому нечисловому значенні (допускається єдине нечислове значенні — точка, яка відділятиме цілу частину від дробової). Дуже зручно, коли у нас упереміж з числовими даними прописуються одиниці виміру або валюта.
IsNumeric() і IsDate() — перевіряють значення на відповідність, щоб не виникло помилок при конвертації. Для перевірки на відповідність спеціальным значенням можна використовувати функції IsArray(), IsEmpty(), IsError(), IsMissing(), IsNull() і IsObject(). Усі ці функції возвращають True або False залежно від результатів перевірки переданого ним значення.
Hex() і Oct() — перетворюють десяткові дані в стрічкові представлення шістнадцятиричних і вісімкових значень.
9.3. Стрічкові функції
Asc() — ця функція дозволяє повернути числовий код для переданого символу. Наприклад, Asc("D") поверне 68. Цю функцію зручно використовувати для того, щоб визначити наступну або попередню букву. Зазвичай вона використовується разом з функцією Chr(), яка робить зворотну операцію — повертає символ по переданому його числовому коду. Наприклад, такий код в Excel дозволяє написати в комірки з A1 по A20 послідовно букви українського алфавіту від A до У:
Dim n, nCharCode As Integer
n = 1
nCharCode = Asc("А")
Do While n <= 20
ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode)
n = n + 1
nCharCode = nCharCode + 1
Loop
Варіанти цієї функції — AscB() і AscW(). AscB() повертає тільки перший байт числового коду для символу, а AscW() повертає код для символу в кодуванні Unicode.
Chr() — повертає символ за його числовим кодом. Окрім того, що використується в парі з функцією Asc() (див. попередній приклад), без неї не обійтися ще в одній ситуації: коли треба вивести службовий символ. Наприклад, нам треба надрукувати в Word значення "Газпром" (у лапках). Лапка — це службовий символ, і спроба використовувати рядок виду :
Selection.Text = "" Газпром""
приведе до синтаксичної помилки. А ось так усе буде в порядку :
Selection.Text = Chr(34) & "Газпром" & Chr(34)
Є варіанти цієї функції — ChrB() і ChrW(). Працюють аналогічно таким же варіантам для функції Asc().
InStr() і InStrRev() — одні з найпопулярніших функцій. Дозволяють виявити в тілі стрічкової змінної послідовність символів і повернути її позицію. Якщо послідовність не виявлена, то повертають 0. Функція InStr() шукає з початку рядка, а InStrRev() — з кінця.
Left(), Right(), Mid() — дозволяють узяти вказану вами кількість символів з існуючої стрічкової змінної ліворуч, справа або з середині відповідно.
Len() — повертає число символів в рядку (довжину рядка). Часто використується з циклами, операціями заміни і т. д.
LCase() і UCase() — переводять рядок в нижній і верхній регістри відповідно. Часто використовуються для підготовки значення до порівняння, коли регістр не важливий (прізвища, назви фірм, міст і т. п.).
LSet() і RSet() — заповнюють одну змінну символами іншої без зміни її довжини (відповідно ліворуч і справа). Зайві символи обрізаються, на місце де їх не вистачає підставляються пропуски.
LTrim(), RTrim(), Trim() — прибирають пропуски відповідно ліворуч, справа або і ліворуч, і справа.
Replace() — замінює в рядку одну послідовність символів на іншу.
Space() і String() — повертають рядок з вказаної вами кількості пропусків або символів відповідно. Зазвичай використовуються для форматування виводу спільно з функцією Len(). Ще одна схожа функція — Spc(), яка використовується для форматування виводу на консоль. Вона розмножує пропуски з урахуванням ширини командного рядка.
StrComp() — порівнює два рядки.
StrConv() — перетворить рядок (в Unicode і назад, у верхній і нижний регістри, першу букву слів заголовної і т. д.).
StrReverse() — "перевертає" рядок, розмістивши його символи в зворотному порядку.
Tab() — ще одна функція, яка використовується для форматування виводу на консоль. Розмножує символи табуляції в тій кількості, в якому ви вкажете. Якщо ніякої кількості не вказано, просто вставляє символ табуляції. Для вставки символу табуляції в стрічкове значення можна також використовувати константу vbTab.