Vba excel преобразование типов

Обновлено: 02.07.2024

Встроенные функции преобразования и проверки типов данных 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, и так далее).

функции преобразования vba

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: Функции - математические и для работы с подтипами данных".

Спасибо за внимание. Автор блога Владимир Баталий

Читайте также: