Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Типы данных

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

    Встроенные типы данных

    Встроенные типы данных VBA Excel:

    Тип данных Байты* Диапазон значений
    Byte 1 Целые числа:
    от 0 до 255
    Boolean 2 True (Истина) или False (Ложь)
    Integer 2 Целые числа:
    от -32768 до 32767
    Long 4 Целые числа:
    от -2147483648 до 2147483647
    Single 4 Отрицательные числа:
    от -3,402823Е+38 до -1,401298Е-45
    Положительные числа:
    от 1,401298Е-45 до 3,402823Е+38
    Double 8 Отрицательные числа:
    от -1,79769313486232Е+308
    до -4,94065645841247Е-324
    Положительные числа:
    от 4,94065645841247Е-324
    до 1,79769313486232Е+308
    Currency 8 от -922337203685477,5808
    до 922337203685477,5807
    Date 8 с 1 января 100 года
    по 31 декабря 9999 года
    Object 4 Ссылка на объект
    String
    (переменной длины)
    10 + длина строки от 0 до ≈2 млрд символов
    String
    (фиксированной длины)
    длина строки от 1 до ≈65400 символов
    Variant
    (числа)
    16 В пределах диапазона типа
    данных Double
    Variant
    (символы)
    22 + длина строки от 0 до ≈2 млрд символов

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

    Тип данных Байты* Диапазон значений
    LongLong 8 Целые числа:
    от –9 223 372 036 854 775 808
    до 9 223 372 036 854 775 807
    Доступен только в 64-разрядных системах.
    LongPtr 4 или 8 В 32-разрядных системах соответствует типу Long:
    от -2147483648 до 2147483647,
    в 64-разрядных — типу LongLong:
    от –9 223 372 036 854 775 808
    до 9 223 372 036 854 775 807

    *Резервируется память в байтах на каждую переменную соответствующего типа.

    Тип данных Variant может принимать специальные значения: Empty, Error, Nothing и Null.

    Кроме встроенных типов данных VBA Excel позволяет использовать пользовательские типы, создаваемые с помощью оператора Type. Диапазон значений пользовательского типа данных определяется встроенными типами, из которых он состоит.

    Переменные с типами данных Byte, Boolean, Integer, Long, Single и Double можно объявлять с помощью суффиксов.

    Функция TypeName

    TypeName – это функция, возвращающая значение типа String с информацией о переменной.

    Чаще всего, функция TypeName возвращает наименование типа данных аргумента (значения), содержащегося в переменной. Кроме наименований встроенных типов данных, функция TypeName может возвращать следующие значения:

    Значение Описание
    Collection, Dictionary, Range, Worksheet и т.д. Тип известного объекта, ссылка на который содержится в объектной переменной
    Error Переменная содержит значение ошибки
    Empty Неинициализированное значение
    Null Отсутствие допустимых данных
    Unknown Объект, тип которого неизвестен
    Nothing Объектная переменная, которая не ссылается на объект

    Если переменная объявлена с числовым типом данных или String, функция TypeName возвратит наименование этого типа данных. Если переменная объявлена с типом данных Variant или Object, возвращаемое значение будет зависеть от содержимого переменной.

    Пример:

    Оператор Option Explicit

    VBA Excel допускает использование в коде как объявленных, так и необъявленных переменных. Необъявленным переменным присваивается тип данных Variant и они могут принимать все допустимые значения, свойственные этому типу.

    Если при написании кода допустить ошибку в имени ранее использовавшейся переменной, компилятор зарегистрирует ее как новую. Это вызовет ошибки в работе программы, причину которых (ошибку в имени переменной) трудно обнаружить при отладке.

    Чтобы избежать ошибок при работе с переменными используется оператор Option Explicit. Он указывает на то, что все переменные в модуле должны быть объявлены с помощью ключевого слова Dim или ReDim. В этом случае, если компилятор обнаружит строку с необъявленной переменной, то сгенерирует ошибку и выделит эту переменную.

    Размещается оператор Option Explicit в самом начале модуля перед всеми остальными операторами. Чтобы каждый раз не вставлять его вручную и, тем более, не забыть о нем, можно настроить редактор VBA Excel, чтобы он автоматически добавлял Option Explicit при создании нового модуля.

    Настройка автоматического добавления Option Explicit

    1. Откройте окно Options через вкладку меню Tools:

    Путь к окну Options

    2. Отметьте галочкой опцию Require Variable Declaration на вкладке Editor:

    Окно Options

    3. Теперь новый модуль открывается со строкой Option Explicit:

    Строка Option Explicit вставлена


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    13 комментариев для “VBA Excel. Типы данных”

    1. Надо заметить, что тип данных Date хранит не только даты, но и время.

    2. Кстати, а можно ли определить размер переменной в байтах?
      Что-нибудь типа MsgBox (Size(i))

    3. Cтолбец «D» — текcтовая информация

      для поиска и сравнения хочу переменной «poisk» присвоить значение ячейки D3
      Машина ругается «Ошибка метода _Default объекта Range»
      Что она (машина ) из-под меня хочет ?

        1. спасибо!
          На ровном месте споткнулся!
          В переменной прописываю n_p а проверяю r ?!
          Надо пойти на свежий воздух проветриться

    4. Здравствуйте!
      Хочу обратить внимание достопочтенной публики, что не все дробные значения одинаково полезны.

      Есть несколько способов справиться с этим безобразием.
      Самый простой — это не использовать Single, если планируете работать с ячейками.
      Типы данных Double или Variant подобным, как будто бы, не грешат,
      с другой стороны, их размер (в байтах) больше, чем у Single.
      Можно также использовать округление ячеек до двух цифр после запятой

      Для самых же смелых духом, я предлагаю решение, где не нужно изменять тип переменной или вводить дополнительные:

    5. работаю с числами в текстовом формате

      машина выдает «0» в числовом формате (правое расположение в ячейке)

      1. Евгений

    6. Евгений, ответ правильный, но меня он не устраивает …
      похоже я криво изложил свою проблему
      [d2] — в данном случае несет визуально-контрольное назначение ( чтобы можно было ТОЛЬКО посмотреть/проверить и ВСЁ ! )
      Все действия (вырезать, правый/левый, сцепить …) это всё будет проводиться с переменной t1
      Именно у t1 должен быть текстовый формат
      т.е.

      В этом случае t2 должна быть «00000234»

    7. Опечатка:

    Обсуждение закрыто.