Vba excel преобразование типов
Встроенные функции преобразования и проверки типов данных VBA, функции CBool(), CByte(), CCur(), CDate(), CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr(), Str(), Val(), IsNumeric(), IsDate(), IsEmpty(), IsError(), IsMissing(), IsNull(), IsObject(), IsArray(), Hex(), Oct()
В программах на VBA очень часто приходится преобразовывать значения из одного типа данных в другой. Несколько типичных ситуаций, когда этим приходится заниматься:
- преобразование из строкового значение в числовое при приеме значения от пользователя через InputBox();
- преобразование значения даты/времени в строковое, когда нам нужно отобразить дату или время единообразно вне зависимости от региональных настроек на компьютерах пользователей;
- преобразование значения из строкового в дату/время для применения специальных функций даты/времени.
Чаще всего для конвертации типов данных используются функции, имя которых выглядит как C (от слова Convert) + имя типа данных. Вот перечень этих функций: CBool(), CByte(), CCur(), CDate(), CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr(). Просмотреть, что в итоге получилось, можно при помощи функции TypeName(), например:
nVar1 = CInt(InputBox("Введите значение"))
Кроме того, еще несколько полезных для конвертации функций:
- Str() — позволяет перевести числовое значение в строковое. Делает почти то же самое, что и CStr(), но при этом вставляет пробел впереди для положительных чисел.
- Val() — "вытаскивает" из смеси цифр и букв только числовое значение. При этом эта функция читает данные слева направо и останавливается на первом нечисловом значении (допускается единственное нечисловое значение — точка, которая будет отделять целую часть от дробной). Очень удобно, когда у нас вперемежку с числовыми данными прописываются единицы измерения или валюта.
Чтобы не возникло ошибок при конвертации, можно вначале проверять значения на возможность конвертации при помощи функций IsNumeric() и IsDate(). Для проверки на соответствие специальным значениям можно использовать функции IsArray(), IsEmpty(), IsError(), IsMissing(), IsNull() и IsObject(). Все эти функции возвращают True или False в зависимости от результатов проверки переданного им значения.
Для того, чтобы преобразовать десятичные данные в строковое представление шестнадцатеричных и восьмеричных значений, используются функции Hex() и Oct(). Для обратного преобразования специальных функций не предусмотрено, но вы можете указать компилятору VBA, что эти числа записаны в шестнадцатеричном или восьмеричном формате, записав их, например, как &O12 и &HA.
Каждая функция приводит выражение к нужному типу данных.
Синтаксис
Обязательный аргумент выражение — это любое строковое или числовое выражение.
Возвращаемые типы
Тип возвращаемого значения определяется по имени функции в соответствии со следующей таблицей:
Функция | Тип возвращаемых данных | Диапазон выражения-аргумента |
---|---|---|
CBool | Boolean | Любое допустимое строковое или числовое выражение. |
CByte | Byte | От 0 до 255. |
CCur | Currency | От -922 337 203 685 477,5808 до 922 337 203 685 477,5807. |
CDate | Date | Любое допустимое выражение даты. |
CDbl | Double | От -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений. |
CDec | Decimal | 79 228 162 514 264 337 593 543 950 335 для чисел без десятичных знаков. Для чисел с 28 десятичными знаками диапазон составляет 7,9228162514264337593543950335. Наименьшим возможным числом, отличным от нуля, является число 0,0000000000000000000000000001. |
CInt | Integer | От -32 768 до 32 767, дробная часть округляется. |
CLng | Long | От -2 147 483 648 до 2 147 483 647, дробная часть округляется. |
CLngLng | LongLong | От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807; дробная часть округляется. (Действительно только для 64-разрядных платформ). |
CLngPtr | LongPtr | От -2 147 483 648 до 2 147 483 647 для 32-разрядных систем; от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 для 64-разрядных систем; дробная часть округляется в обоих типах систем. |
CSng | Single | От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений. |
CStr | String | Результат, возвращаемый функцией CStr, зависит от аргумента выражение. |
CVar | Variant | Диапазон совпадает с типом Double для числовых значений и с типом String для нечисловых значений. |
Примечания
Если выражение, переданное в функцию, не входит в диапазон типа, в который преобразуются данные, происходит ошибка.
Функции преобразования должны использоваться для явного присвоения типа LongLong (включая тип LongPtr на 64-разрядных платформах) меньшим целочисленным типам. Неявные преобразования типа LongLong в меньшие целочисленные типы не допускаются.
Как правило, функции преобразования типов используются в тексте программ для того, чтобы указать, что результатом той или иной операции должны стать данные определенного типа, а не типа, заданного по умолчанию. Например, с помощью функции CCur можно принудительно перейти к вычислениям в денежном формате в тех случаях, в которых обычно используются действия с числами с обычной точностью, двойной точностью или с целыми числами.
Функции преобразования типа данных следует использовать вместо функции Val для преобразования типов данных в приложениях, поддерживающих различные региональные стандарты. Например, при использовании функции CCur десятичные разделители, разделители групп разрядов и параметры денежных единиц распознаются в соответствии с языковыми и региональными параметрами компьютера.
Если дробная часть целого числа строго равна 0,5, функции CInt и CLng всегда округляют результат до ближайшего четного числа. Например, 0,5 округляется до 0, а 1,5 — до 2. Функции CInt и CLng отличаются от функций Fix и Int, которые отбрасывают дробную часть числа, а не округляют ее. Кроме того, функции Fix и Int всегда возвращают значение того же типа, что и переданное им выражение.
Для определения возможности преобразования date в дату или время используется функция IsDate. Функция CDate распознает литералы даты и времени, а также некоторые числа, которые находятся в диапазоне допустимых дат. При преобразовании числа в дату преобразуется целая часть числа. Дробная часть преобразуется во время суток, начиная с полуночи.
Функция CDate распознает форматы даты в соответствии с национальной настройкой системы. Если формат передаваемого аргумента не соответствует распознаваемым настройкам даты, функция не сможет определить правильный порядок дней, месяцев и лет. Кроме того, длинный формат даты не распознается, если в нем содержится строка дня недели.
Функция CVDate предназначена для обеспечения совместимости с предыдущими версиями Visual Basic. Синтаксис функции CVDate не отличается от синтаксиса функции CDate; однако функция CVDate возвращает тип Variant, подтипом которого является тип Date, а не собственно тип Date. Поскольку теперь реализован встроенный тип Date, необходимость в функции CVDate отпадает. Такой же результат можно получить, если преобразовать выражение в тип Date и присвоить его типу Variant. Этот способ позволяет преобразовать все прочие встроенные типы в эквивалентные им подтипы Variant.
Функция CDec не возвращает отдельный тип данных. Вместо этого она всегда возвращает результат типа Variant, значение которого преобразовано в подтип Decimal.
Пример функции CBool
В этом примере функция CBool используется для преобразования выражения в тип Boolean. Если выражение разрешается в ненулевое значение, функция CBool возвращает значение True, в противном случае она возвращает значение False.
Пример функции CByte
В этом примере функция CByte используется для преобразования выражения в тип Byte.
Пример функции CCur
В этом примере функция CCur используется для преобразования выражения в тип Currency.
Пример функции CDate
Пример функции CDbl
В этом примере функция CDbl используется для преобразования выражения в тип Double.
Пример функции CDec
В этом примере функция CDec используется для преобразования выражения в тип Decimal.
Пример функции CInt
В этом примере функция CInt используется для преобразования выражения в тип Integer.
Пример функции CLng
В этом примере функция CLng используется для преобразования выражения в тип Long.
Пример функции CSng
В этом примере функция CSng используется для преобразования выражения в тип Single.
Пример функции CStr
В этом примере функция CStr используется для преобразования выражения в тип String.
Пример функции CVar
В этом примере функция CVar используется для преобразования выражения в тип Variant.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Функции преобразования типов данных в VBA Excel. Наименования функций, синтаксис, типы возвращаемых данных, диапазоны допустимых значений выражения-аргумента.
Синтаксис функций преобразования
Выражение (аргумент) – это любое строковое или числовое выражение, возвращающее значение, входящее в диапазон допустимых значений для аргумента. Выражение может быть представлено переменной или другой функцией.
Если аргумент, переданный в функцию, не входит в диапазон типа, в который преобразуются данные, происходит ошибка.
Функции преобразования типов
Наименования функций преобразования типов, типы возвращаемых данных, диапазоны допустимых значений для аргумента:
Функция | Тип данных | Диапазон значений аргумента |
---|---|---|
CBool | Boolean | Любое допустимое строковое или числовое выражение. |
CByte | Byte | От 0 до 255. |
CCur | Currency | От -922 337 203 685 477,5808 до 922 337 203 685 477,5807. |
CDate | Date | Любое допустимое выражение даты. |
CDbl | Double | От -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений. |
CDec | Decimal | 79 228 162 514 264 337 593 543 950 335 для чисел без десятичных знаков. Для чисел с 28 десятичными знаками диапазон составляет 7,9228162514264337593543950335. Наименьшим возможным числом, отличным от нуля, является число 0,0000000000000000000000000001. |
CInt | Integer | От -32 768 до 32 767, дробная часть округляется. |
CLng | Long | От -2 147 483 648 до 2 147 483 647, дробная часть округляется. |
CSng | Single | От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений. |
CStr | String | Результат, возвращаемый функцией CStr, зависит от аргумента Выражение. |
CVar | Variant | Диапазон совпадает с типом Double для числовых значений и с типом String для нечисловых значений. |
Примеры преобразования типов
Функция CBool
Функция CBool используется для преобразования выражений в тип данных Boolean.
Часто в программировании возникает необходимость перевести один тип в другой (по доступным типам данных в VB читаем в этой статье). Например, число в строку или строку в дату. Для перевода (преобразования) типов в VBA есть множество функций позволяющих это сделать. Но есть один момент, преобразовать возможно только тот тип или значение, которое подходит по формату нового типа. К примеру, если преобразовать строку "356" в целый тип, то на выходе мы получим число, но если в этой строке будет находиться символ, не относящийся к числу "356р", то преобразование завершится ошибкой несовпадения типов (Type mismatch).
В таблице ниже приведен полный список функций преобразования и тип, в который происходит преобразование:
Функция
Возвращает тип
Действие
CBool
Преобразует значение в булевый тип
CByte
Преобразует значение в тип Byte
CCur
Преобразует значение в тип Currency
CDate
Преобразует значение в Дату и Время
CDbl
Преобразует значение в тип Double
CDec
Преобразует значение в подтип Decimal типа Variant
CInt
Преобразует значение в целый тип
CLng
Преобразует значение в длинное целое
CSng
Преобразует значение в тип Single
CStr
Преобразует значение в строку
CVar
Преобразует значение в тип Variant
Использование функций преобразования типов
Работать с функциями преобразования легко. К примеру, необходимо преобразовать число 4568 в строку:
Dim OutStr as String
OutStr = CStr(4568)
Преобразование строки или числа в булевый тип
Dim OutBool as Boolean
'Функция вернет значение True
OutBool = CBool(1)
OutBool = CBool ("TRUE")
Преобразование строки или числа в дату и время
Dim OutDate as Date
OutDate = CDate("25/06/03 23:35")
OutDate = CDate("25.06.03")
OutDate = CDate("37797,9826388889")
Примечание: Функции преобразования можно использовать непосредственно в выражении избегая создания лишних переменных. Например: x=y+CInt("456")+z
Описанные ниже функции позволяют преобразовать переданный параметр, который может быть или числом или строкой к заданному типу данных vba. Отличительная особенность данных функций vba преобразования типов от остальных – префикс C (от слова Convert), после которого следует краткое имя типа данных, к которому происходит преобразование (например, Bool – Boolean, Cur – Currency, и так далее).
CBool (par) – Преобразование к типу Boolean. Если параметр par будет отличаться от 0, то функция вернет значение true, в противном случае – false.
CByte (par) – Преобразование к типу Byte. Параметр par должен содержать числовое значение или строку, которые являются числом без знака в диапазоне значений от 0 до 255. Условия преобразования:
- Если значение дробной части меньше 0.5, то она будет отброшена. В случае, если дробная часть больше 0.5 – к целой части добавится единица. Если же дробная часть ровна 0.5, то произойдет округление до ближайшего четного числа.
- Если переданный параметр является строкой, то он должен содержать только цифры, в противном случае произойдет генерация ошибки.
- В случае, если параметр содержит отрицательное число или число, которое больше 255, то также произойдет генерация ошибки. (vba преобразование типов)
CCur (par) – Преобразование к типу vba Currency. Передаваемый параметр должен содержать значение в диапазоне от -922 337 203 685 477.5808 до 922 337 203 685 477.5807.
- Если параметр содержит дробное число, содержащее больше 4 знаков в дробной части, то функция округляет его до четырех десятичных знаков.
- Если параметр не входит в допустимый диапазон, то произойдет генерация ошибки.
CDate (par) – Преобразует переданный параметр vba в тип дата.
CDbl (par) – Преобразование к типу vba Double. Переданный параметр должен содержать любое числовое значение или строку, которые входят в диапазон от -1.79769313486232E308 до -4.94065645841247E-324 для отрицательных значений, и от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений.
- Если значение переданного параметра не попадает в допустимый диапазон, то произойдет ошибка. (vba преобразование типов)
- Если параметр является строкой, содержащей не только цифры, то произойдет ошибка.
CDec (par) – Преобразование к типу vba Decimal. Параметр должен содержать любое числовое или строковое значение, входящее в диапазон представляющий целое число в диапазоне +/-79 228 162 514 264 337 593 543 950 335 или смешанное с не более чем 28 цифрами в дробной части в диапазоне +/-7.9228162514264337593543950335. Минимальным возможным ненулевым числом является 0.0000000000000000000000000001.
CInt (par) – Преобразование к типу vba Integer. Передаваемый параметр должен входить в диапазон чисел от -32768 до 32767.
CLng (par) – Преобразование к типу vba Long, допустимы диапазон передаваемого параметра числа от -2147483648 до 2147483647.
CSng (par) – Преобразование к типу vba Single. Допустимый диапазон - число от -3.402823E8 до -1.401298E-45 для отрицательных значений и от 1.401298E-45 до 3.402823E8 для положительных значений.
- Если передаваемый параметр содержит значение, которое меньше минимального допустимого значения, то функция вернет значение 0.
- Если параметр содержит значение, которое превышает максимально допустимое, то произойдет генерация ошибки. (vba преобразование типов)
- Если передаваемый параметр является строкой и содержит не только цифры, то произойдет генерация ошибки.
- Если число знаков дробной части в параметре выходит за пределы допустимого диапазона, то функция усекает ее (дробную часть).
CStr (par) – Преобразует переданный параметр в строковое значение.
Str (par) — Аналогично функции CStr, но перед положительными числами вставляется пробел.
CVar (par) – Преобразует переданы параметр в тип vba Varint.
CVDate (par) – Фактически, функция аналогична CDate, и используется только для совместимости.
Val (par) — Извлекает из переданного параметра только цифры.
TypeName (par) – Функция возвращает имя типа данных vba, для переданного параметра.
Следующие функции преобразования vba возвращают логические значения true или false, и предназначены для проверки переданного параметра на конкретный тип данных.
IsNumeric (par) - Число
IsDate (par) - Дата
IsArray (par) - Массив
IsEmpty (par) – Тип Empty
IsError (par) - Ошибка
IsMissing (par) – Необязательный параметр, переданный в процедуру
IsNull (par) – Пустое значение
IsObject (par) - Объект
Для преобразования числового значения к восьмеричному или шестнадцатеричному виду, применяются следующие функции:
Hex (par) – Шестнадцатеричный вид.
Oct (par) – Восьмеричный вид.
Помимо данных функций преобразования типов vba, для формирования восьмеричного или шестнадцатеричного вида числа, можно использовать следующий формат при записи:
&O – Буква O говорит, что мы хотим прописать восьмеричное значение, которое следует после символа O.
&HA - Буква H говорит, что мы хотим прописать шестнадцатеричное значение, которое следует после символа H.
Так как большая часть приведенных функций используется и в языке VBScript, то примеры с ними можно посмотреть в статьях "Урок 4 по VBScript: преобразование типов данных" и "Урок 10 по VBScript: Функции - математические и для работы с подтипами данных".
Спасибо за внимание. Автор блога Владимир Баталий
Читайте также: