Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel типы данных ячейки

Определение типа данных в ячейке или переменной

В языке VBA есть универсальные типы данных, т.е. способные хранить как число, так и строку, дату и любой другой тип информации. Например, ячейка в таблице может содержать что угодно и изначально, программа не знает какой в ней тип данных хранится. Кроме того, в самой программе может использоваться тип данных Variant, который так же может содержать любое значение любого типа.

Чтобы определить какой тип данных в ячейке или в переменной типа Variant, можно воспользоваться несколькими способами.

Способ 1. Использовать функцию TypeName для определения типа данных

Эта функция возвращает строку с названием типа данных на английском. В качестве аргумента принимает переменную, значение ячейки.
Обратите внимание: Функция определяет только стандартные типы данных и не может определить пользовательский тип (определенный с помощью Type).

Возможные возвращаемые функцией значения:

ByteЧисло типа Byte
IntegerЦелое число
LongДлинное целое число
SingleЧисло одиночной точности с плавающей запятой
DoubleЧисло двойной точности с плавающей запятой
CurrencyВалюта
DecimalЧисло с плавающей запятой
DateДата
StringСтрока
BooleanЛогическое
ErrorОшибка
EmptyНе проинициализировано (т.е. переменная не была объявлена)
NullНеверные данные (в переменной нет корректных данных)
ObjectОбъект (класс)
UnknownТип данных не известен
NothingОбъект, никуда не ссылающийся

Приведу несколько примеров по использованию TypeName.

Пример 1. Определение типа переменной.

Обратите внимание: если вы используете результат TypeName в условии, т.е. проверяете, соответствует ли тип данных определенному, например, Integer, то регистр символов возвращаемого типа имеет значение. Т.е. нужно писать Integer с заглавной буквы, либо использовать приведение всех символов к одному регистру.

Пример 2. Использование TypeName в условии.

Пример 3. Определение типа данных в ячейке.

Если функции была передана переменная массив, она вернет тип данных в массиве с добавлением скобок.

Пример 4. Определение типа массива.

Способ 2. Проверка на возможность преобразования строки к нужному типу.

Бывает ситуация, когда значение, например, число или дата, содержится в строке. В этом случае TypeName вернет String, а не Integer или Date. Чтобы узнать, что содержится в строке, можно воспользоваться одной из функций IsNumeric, IsDate, IsObject, IsArray, IsNull, IsError.

IsNumericПроверяет может ли выражение быть преобразовано в число
IsDateПроверяет может ли выражение быть преобразовано в дату
IsObjectПроверяет, является ли переменная объектом
IsArrayПроверяет, является ли переменная массивом
IsNullПроверка на пустое значение
IsErrorПроверка выражения на ошибку

Пример 4. Определение может ли переменная быть преобразована в число.

К сожалению, как видим из примера, нет возможности проверить, содержится ли в строке число с плавающей точкой.

Пример 5. Определение содержит ли переменная дату (может быть преобразована в дату).

Проверка, содержится ли число или дата в ячейке листа делается аналогично, как и с переменными.

Помимо этих способов можно конечно еще придумать и другие, например, проверку строки с данными регулярным выражением или пройти по каждому символу в цикле и проверить цифра это или нет и тому подобное. Но на мой взгляд, описанных мной способов вполне достаточно для решения повседневных задач.

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

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

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

Тип данныхБайты*Диапазон значений
Byte1от 0 до 255
Boolean2True (Истина) или False (Ложь)
Integer2от -32768 до 32767
Long4от -2147483648 до 2147483647
Single4Отрицательные числа:
от -3,402823Е+38 до -1,401298Е-45
Положительные числа:
от 1,401298Е-45 до 3,402823Е+38
Double8Отрицательные числа:
от -1,79769313486232Е+308
до -4,94065645841247Е-324
Положительные числа:
от 4,94065645841247Е-324
до 1,79769313486232Е+308
Currency8от -922337203685477,5808
до 922337203685477,5807
Date8с 1 января 100 года
по 31 декабря 9999 года
Object4Ссылка на объект
String
(переменной длины)
10 + длина строкиот 0 до ≈2 млрд символов
String
(фиксированной длины)
длина строкиот 1 до ≈65400 символов
Variant
(числа)
16В пределах диапазона типа
данных Double
Variant
(символы)
22 + длина строкиот 0 до ≈2 млрд символов

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

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

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

Оператор Option Explicit

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

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

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

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

Читать еще:  C open excel file

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

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

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

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

Типы данных VBA

Типы данных — это определенные виды данных, которые VBA сохраняет и может манипулировать.

Тип Date

VBA использует тип Date для хранения дат и времени.

При работе с этим типом данных следует иметь ввиду, что VBA-типы Date не являются такими же типами, как в рабочих листах Excel, хотя во многом и схожи с ними. Например, базовой датой для VBA-типа Date является 30 декабря 1899 года, а в Excel — 1 января 1900 года.

VBA-тип Date является типом последовательных дат. VBA использует отрицательные числа для представления дат ранее базовой даты (30 декабря 1899), и положительные — для дат после базовой. Число 0 представляет саму дату 30.12.1899.

В значении последовательной даты целая часть — это общее число дней от базовой даты. Дробная часть (цифра справа от десятичного знака) — эти цифры обозначают время дня как часть дня. Один час — это 1/24 дня, одна минута — 1/1440 дня, секунда — 1/86400 дня.

Можно вычитать одну дату из другой, добавлять к дате или вычитать числа для изменения ее значения. В VBA имеется несколько встроенных процедур для отдельного извлечения года, месяца, дня, часов, минут и секунд переменной типа Date.

Числа

VBA имеет шесть различных численных типов данных: Byte, Integer, Long, Single, Double, Currency.

Они используются для хранения чисел в различных форматах, в зависимости от конкретного типа.

Целые числа

Integer — это целое число без дробной части (целые числа никогда не содержат десятичного знака, даже если десятичная часть равна нулю).

VBA предоставляет три типа целых данных: Byte, Integer, Long.

Byte — наименьший из трех типов целых данных, предназначен для хранения числе от 0 до 255. Этот тип обычно используют для хранения двоичных данных.

Integer использует диапазон целых чисел от -32768 до 32767.

Long использует диапазон целых чисел от -2147483648 до 2147483647.

Byte, Integer, Long типы требуют меньше памяти для хранения чисел, чем другие численные типы данных VBA, а математические операции и операции сравнения над числами указанных типов быстрее, чем эти же операции для численных типов данных с плавающей точкой.

VBA автоматически преобразует данные типов Byte, Integer, Long в текст, когда они выводятся на экран, используя такие процедуры, как MsgBox.

Числа с плавающей точкой

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

VBA имеет два типа данных с плавающей точкой: Single, Double.

Single используется для хранения:
отрицательных чисел от -3,402823*10 38 до -1,401298*10 -45
и положительных от 1,401298*10 -45 до 3,402823*10 38 .
Числа, хранимые с использованием типа Single, называются числами одинарной точности.

Double используется для хранения:
отрицательных чисел от -1,79769313486232*10 308 до -4,94065645841247*10 -324
и положительных от 4,94065645841247*10 -324 до 1,79769313486232*10 308 .
Числа, хранимые с использованием типа Double, называются числами двойной точности.

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

В экспоненциальном представлении значения записываются без начальных и конечных нулей, и слева от десятичного знака имеется только одна цифра. Число умножается на 10 в некоторой степени, чтобы показать, где на самом деле находится десятичный знак. Следует помнить, что отрицательная степень приводит в результате к меньшему числу, а положительная — к большему. Вместо надстрочного символа показателя степени используется буква Е:
4.1Е3=4100
2.01Е-2=0.0201

Тип данных Currency

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

Currency хранит числа в диапазоне от -922337203685477,5808 до 922337203685477,5807.

Текстовые строки

Любые текстовые данные, сохраняемые в VBA, называются строками. Для их хранения предназначен тип данных String.

Строка может содержать текстовые символы любых типов: буквы, цифры, знаки пунктуации, разделительные символы и пр.

Строки всегда заключаются в двойные кавычки.

Существует две категории строк: строки переменной длины и строки фиксированной длины. По умолчанию в VBA все строки переменной длины.

Следует сказать, что тип данных String является очень важным типом, т.к., как правило, информация, вводимая пользователем — это строковые данные. Кроме того, поскольку на экране монитора отображается только текст, то все другие типы данных должны быть преобразованы в строковые данные перед выводом на экран.

Логические значения

VBA-программа принимает то или иное «решение», основываясь на различных условиях. Любое условие может принимать два значения: True (Истина) или False (Ложь). Логические значения True и False называются булевскими значениями, а тип данных — Boolean.

Булевские значения получают как результат операции сравнения. Операции сравнения имеет место при сравнении одного с другим, например, при сравнении двух чисел для определения, которое из них больше.

Читать еще:  Vb net excel

Тип данных Variant

Это особый тип данных, который может сохранять любые типы, за исключением типа Object. VBA использует этот тип данных для всех переменных, если только они не объявлены явно.

Данные типа Variant принимают характеристики определенного типа, который они сохраняют в данный момент. Например, если данные типа Variant содержат строковые данные, Variant принимает характеристики типа String. VBA использует для данных типа Variant наиболее компактное представление, возможное для конкретных значений, находящихся в данных.

Несмотря на то, что типы Variant удобны и избавляют от некоторой части работы при написании кода, они требуют большего объема памяти, чем любой другой тип данных, за исключением больших строк. Кроме того, математические операции и операции сравнения над данными типа Variant выполняются медленнее, чем подобные операции над данными любого другого типа. Следует избегать использования переменных Variant.

Подведем итог вышесказанному:

Тип данных

Описание и диапазон значения

Хранение положительных чисел от 0 до 255

Хранение логических значений: True, False

Хранение чисел для точных вычислений в диапазоне
от -922337203685477,5808 до 922337203685477,5807

Хранение даты и времени.
Даты от 1.01.100 до 31.12.9999
Время от 00:00:00 до 23:59:59

Хранение чисел двойной точности
от -1,79769313486232*10 308 до -4,94065645841247*10 -324
от 4,94065645841247*10 -324 до 1,79769313486232*10 308

Хранение целых чисел от -32768 до 32767

Хранение целых чисел от -2147483648 до 2147483647

Хранение чисел одинарной точности
от -3,402823*10 38 до -1,401298*10 -45
от 1,401298*10 -45 до 3,402823*10 38

Хранение текста длиной до 2 млрд. символов

Хранение любого типа данных

В начало страницы

В начало страницы

Основы VBA: синтаксис, переменные, типы данных

5.1. Синтаксические описания

Синтаксис языка программирования — это правила написания программ.

Рассмотрим пример — возьмем из справочной системы описание команды. Мы пока не будем вдаваться в смысл ключевых слов (перед нами — описание оператора цикла ), приведенных здесь, остановимся на основных частях описания.

В синтаксических описаниях VBA жирным шрифтом выделены ключевые слова языка, курсивом даны названия переменных и других элементов языка . В квадратных скобках располагаются необязательные элементы – то есть такие элементы, без описания которых можно обойтись. Например, в приведенном описании блоки [statements] будут содержать в себе «полезную нагрузку» цикла – операторы , которые будут выполняться многократно, однако цикл будет работать и без них.

Элементы, которые допускают альтернативный выбор, разделяются знаком » | «. Например, такая запись : » one | two » обозначает » one или two».

Ниже мы будем останавливаться на существенно важных особенностях тех или иных конструкций. Если вам понадобятся подробности — вы сможете найти их в справке к VBA .

Теперь рассмотрим понятие переменной — важнейшее понятие в любом языке программирования.

5.2. Переменные

Переменная — это именованная область памяти, где могут храниться различные данные, которые можно изменять во время выполнения программы . Переменные — это одна из основ любой программы. В них можно сохранять введенную пользователем информацию, их можно использовать для накопления данных, обработанных в программе и так далее. Если бы не было переменных — программирования не существовало бы.

У переменной есть несколько важнейших характеристик. Первая — имя переменной . Используя имя, мы можем обращаться к переменной в программе. Вторая характеристика — это тип данных , которые могут храниться в переменной . Тип определяет характер данных, которые мы можем хранить в переменной . Например, это могут быть числовые данные (возраст пользователя) и строковые данные ( имя пользователя ).

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

  • Имя переменной должно состоять из букв и цифр, причем оно должно начинаться с буквы.
  • Имя не может быть длиннее 255 символов
  • Имя не должно содержать специальных знаков ( # , $ , % и т.д.) и пробелов.
  • В качестве имен нельзя использовать зарезервированные слова VBA (например – if , dim , for и т.д.).

При именовании переменных старайтесь пользоваться латинскими буквами. Иначе возможны проблемы при работе ваших программ на различных версиях Office.

Например, такие имена переменных выглядят вполне корректно: str_Name , num_Age , str_Name1 , num_Item2 и т.д. Обратите внимание на префиксы, которыми мы снабдили имена переменных . Это признак особого стиля именования переменных . Он очень напоминает стиль именования элементов управления, который мы рассматривали выше.

Напишем программу на VBA , иллюстрирующую простой пример работы с переменными . Сначала она должна задать пользователю вопрос: «Как вас зовут», а потом — вывести его имя в окне сообщения.

Для этого добавим в документ Microsoft Word кнопку с именем cmd_Variables и надписью » Имя пользователя «. Зададим ее обработчику Click следующий код (листинг 5.1.):

Первая строка этого кода содержит новую для вас функцию InputBox . Она используется для вывода окна с сообщением и полем для ввода данных. Строка, которая передается функции в качестве параметра — это и есть сообщение, которое будет выведено в окне.

На рис. 5.1. вы можете видеть это окно.

Выражение txt_Name = означает, что мы присваиваем переменной с именем txt_Name то, что пользователь введет в окне ввода данных, как бы говорим программе: «Сохрани в переменной txt_Name то, что пользователь введет в окне». Когда пользователь сообщает свое имя и нажимает OK —введенная им строка записывается в переменную txt_Name . Введем на приглашение программы имя «Александр», вы можете ввести любое другое имя.

Читать еще:  Как открыть vba в excel

Теперь мы можем выполнять много разных действий с этой переменной . В частности — использовать в качестве параметра, передаваемого функции MsgBox . В данном примере мы так и поступили — вызвали MsgBox , указав вместо выводимого текста имя переменной . В результате в окне сообщения вывелось имя пользователя , введенное на предыдущем этапе (рис. 5.2.).

Обратите внимание на то, что мы не заключили имя переменной в кавычки. Иначе в окне сообщения вывелось бы лишь имя переменной ( txt_Name ), но не хранимый в ней текст.

5.3. Типы данных в VBA

Тип данных определяет важнейшие свойства переменной . А именно, следующее:

  • что может храниться в переменной (текст, число, некоторые другие виды данных);
  • размер памяти, необходимый для хранения переменной (измеряется в байтах);
  • операции, которые можно производить с переменной (например, невозможно извлечь квадратный корень из слова «Привет» так как эта операция не определена для строковых данных);

Вы уже можете предположить как минимум два типа данных , которые могут хранить переменные — строковые и числовые. На самом деле список типов данных VBA гораздо обширнее.

В табл. 5.1. вы найдете информацию об основных типах данных VBA .

Таблица 5.1. Типы данных в VBA

Тип данныхРазмер, байтОписаниеДиапазон значений
Variant16 (числа) 22+длина строки (строки)Может хранить данные любых типов
Integer2Целое числоот -32768 до 32767
Long4Длинное целоеот -2147483648 до 2147483647
Single4Число с плавающей запятойДля отрицательных: от -3.402823E38 до -1.401298E-45 Для положительных: от 1.401298E-45 до 3.402823E38
Double8Число с плавающей запятой двойной точности, для отрицательных значений и для положительныхДля отрицательных от -1.79769313486231E308 до -4.94065645841247E-324 Для положительных: от 4.94065645841247E-324 до 1.79769313486232E308
Byte1Байтот 0 до 255
Currency8Денежный форматот -922,337,203,685,477.5808 до 922,337,203,685,477.5807
Decimal14Масштабируемое целое29-значное число с 28 знаками справа от запятой
Boolean2ЛогическийTrue или False
Date8Дата и времяот 1 января 100 г. до 31 декабря 9999 г.
Object4Ссылка на объектРазличные виды объектов
StringЗависит от длины строкиСтрока

Как видите, в VBA существует немало типов данных. Наверное, сейчас вам кажется, что их слишком много. Может показаться, что нет ничего удобнее типа данных Variant . Однако надо учесть, что за универсальность типа Variant приходится платить производительностью и системными ресурсами. Чем больше места требуется для хранения переменной — тем ниже скорость работы с ней.

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

Как правило, для работы с дробными числами и различных вычислений используют тип данных Double . Для переменных , которые используются в циклах, счетчиках — Integer или Long . В работе со строками используют String . Объектные переменные имеют самые разные типы, которые определяются объектами, для обращения к которым они создаются. В небольших проектах вполне оправдано использование переменных типа Variant – это не слишком замедлит работу. Однако, если размер проекта растет или вы нуждаетесь в ускорении ресурсоемких вычислений – подходите к выбору типов данных ответственно.

Если при объявлении переменной не указывать ее тип — он автоматически устанавливается в Variant . Объявляя переменную без указания типа, вы пользуетесь преимуществами работы с объявленными переменными , и, в то же время, можете гибко использовать переменную для хранения различных типов данных (например – чисел с плавающей запятой и целых чисел). Такой подход — объявление переменных без указания типа — допустим при создании небольших проектов, а так же — на начальном этапе работы над достаточно масштабными программами, когда вы не знаете точно, какой тип данных понадобится для той или иной переменной . В листингах, которые вы найдете ниже, мы явно задавали тип переменных лишь тогда, когда это либо требовалось по ходу выполнения примера (например – типы объектных переменных ), либо, когда это нужно для лучшего понимания материала ( числовой тип для возраста, строковой — для имени и т.д.) В основном же мы использовали переменные типа Variant .

Выше мы уже говорили о венгерской нотации как о способе именования объектов. Те же правила действуют и для переменных . Префикс имени обычно говорит о типе переменной . В табл. 5.2. приведены некоторые префиксы.

Таблица 5.2. Префиксы и типы переменных

Префикс имени переменнойПояснения
s, strСтроковая переменная
n, numЧисловая переменная (существует множество числовых типов данных, название каждого из которых может быть использовано в качестве префикса, например, int для Integer, dbl для Double и т.д.)
b, boolЛогическая переменная
O, objОбъектная переменная

Для работы с переменными можно использовать два подхода. При первом мы выбираем имя переменной и используем ее в программе без каких-либо подготовительных действий. Именно так мы работали с переменной в примере к п. 5.2. Такая переменная приобретет тип Variant . Второй подход предусматривает объявление переменных перед использованием.

Ссылка на основную публикацию
Adblock
detector