VBA Excel. Функции преобразования типов

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

    Дополнительно для VBA7:

    Функция Тип данных Диапазон значений аргумента
    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-разрядных платформ, дробная часть округляется в обоих типах систем.

    Примеры преобразования типов

    Функция CBool

    Функция CBool используется для преобразования выражений в тип данных Boolean.

    Функция CByte

    Функция CByte используется для преобразования выражений в тип данных Byte.

    Функция CCur

    Функция CCur используется для преобразования выражений в тип данных Currency.

    Функция CDate

    Функция CDate используется для преобразования выражений в тип данных Date. Она распознает форматы даты в соответствии с национальной настройкой системы.

    Функция CDbl

    Функция CDbl используется для преобразования выражений в тип данных Double.

    Примечание
    Eсли основной язык системы – русский, при записи в редакторе VBA Excel дробного числа в виде текста, ставим в качестве разделителя десятичных разрядов – запятую. Проверьте разделитель по умолчанию для своей национальной системы:
    MsgBox Application.DecimalSeparator

    Функция CDec

    Функция CDec используется для преобразования выражений в тип данных Decimal.

    Функция CInt

    Функция CInt используется для преобразования выражений в тип данных Integer.

    Функция CLng

    Функция CLng используется для преобразования выражений в тип данных Long.

    Функция CSng

    Функция CSng используется для преобразования выражений в тип данных Single.

    Функция CStr

    Функция CStr используется для преобразования выражений в тип данных String.

    Функция CVar

    Функция CVar используется для преобразования выражений в тип данных Variant.

    Функции преобразования типов данных используются в тексте процедур VBA Excel для того, чтобы указать, что результатом выполнения той или иной операции должны стать данные определенного типа, отличающегося от типа, заданного по умолчанию.
    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    12 комментариев для “VBA Excel. Функции преобразования типов”

    1. эта команда прекрасно преобразует текст в дату

      этот макрос позволяет выделенный диапазон представить в виде даты

      но здесь новые значения получают новую прописку (новый, другой адрес)
      а как сделать чтобы «b» прописывалась на месте «а»

      и еще один вопрос
      а можно ли обойтись без цикла ?
      т.е. массиву присвоить переменную

      а потом

      1. Евгений

        По первому вопросу: a = CDate(a)
        По второму вопросу: массив не может быть аргументом функции CDate.

    2. Сбитый Лётчик Небосводов

      Здравствуйте, Евгений!
      Здравствуйте, коллеги!
      Почему

      работает, а

      выдаёт Type mismatch?

      1. Евгений

        Добрый день!
        Если Пустая_ячейка имеет общий формат, то пустая строка, возвращенная выражением Replace(Пустая_ячейка, " ", ""), преобразуется в ней в Empty, и функция CSng(Пустая_ячейка) возвращает ноль. Если задать этой ячейке текстовый формат, то x = CSng(Пустая_ячейка), как и выражение x = CSng(Replace(Пустая_ячейка, " ", "")), выдаст ошибку Type mismatch.

        Проверочный код:

        1. Сбитый Лётчик Небосводов

          Увы, формат Общий ни на что не влияет в этом случае. Код

          спотыкается Type mismatch на последней строке, какой бы тип у Cells(1, 1) ни был, если она пустая. А

          работает при «1 2» в Cells(1, 1) любого типа.

          1. Евгений

            Я об этом:

            1. Сбитый Лётчик Небосводов

              Большое спасибо за участие, Евгений.
              Но ясности нет. Если в Sub tmp1() заменить

              на

              то всё тот же Type mismatch.

              1. Евгений

                Функция Replace всегда возвращает строку. CSng(строка) вызывает Type mismatch. Если строка может интерпретироваться как число, например: «256», VBA преобразует его в аргументе функции CSng в число, а пустую строку в ноль не преобразовывает:

                Если ячейка Cells(1, 1) содержит Empty или пустую строку, выражение Replace(Cells(1, 1), " ", "") возвращает пустую строку, и, соответственно, CSng(Replace(Cells(1, 1), " ", "")) возвращает ошибку Type mismatch.

                1. Сбитый Лётчик Небосводов

                  Replace(Cells(1, 1), " ", "") возвращает пустую строку.
                  Стало быть, после Cells(1, 1) = Replace(Cells(1, 1), " ", "") в Cells(1, 1) пустая строка.
                  Тогда, по-Вашему, и CSng(Cells(1, 1)) тоже должен давать Type mismatch, но этого в Sub tmp1() не происходит.

                  1. Евгений

                    Это я уже объяснил ранее: в Sub tmp1() ячейке Cells(1, 1) присваивается общий формат, при котором пустая строка, возвращенная выражением Cells(1, 1) = Replace(Cells(1, 1), " ", ""), автоматически преобразуется в Empty, а CSng(Empty) возвращает ноль. В Sub tmp2(), где ячейке Cells(1, 1) присваивается текстовый формат, преобразования пустой строки в Empty не происходит, и CSng("") генерирует ошибку Type mismatch.

                    1. Сбитый Лётчик Небосводов

                      Так почему код

                      даёт Type mismatch несмотря на присвоение общего формата и автоматического преобразования Replace’ом в Empty?

                      1. Евгений

                        А где вы видите преобразование в ячейке: x = CSng(Replace(Cells(1, 1), " ", ""))? Преобразование в ячейке: Cells(1, 1) = Replace(Cells(1, 1), " ", "")!

    Добавить комментарий

    Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.