
- •Основы программирования на языке Visual Basic for Applications Типы данных
- •Тип данных Boolean
- •Тип данных Date
- •Тип данных Decimal
- •Тип данных Byte
- •Тип данных Integer
- •Тип данных Long
- •Тип данных Currency
- •Тип данных Object
- •Тип данных Single
- •Тип данных String
- •Определяемый пользователем тип данных
- •Тип данных Variant
- •Определение подтипа данных переменной типа Variant
- •Функции определения типа
- •Константы
- •Переменные
- •Массивы
- •Описание массивов фиксированного размера
- •Описание динамического массива
- •Использование многомерных массивов
- •Правила присвоения имен в языке Visual Basic
Массивы
Иногда требуется обработать большой объем данных определенного типа, например, список фамилий студентов. Неудобно описывать отдельную переменную для каждой единицы информации, особенно, если число таких единиц очень велико или заранее неизвестно их количество.
В VBA имеется возможность использовать массив для работы с набором значений одного типа данных. Массив – это набор элементов с определенным типом данных, каждый из которых имеет свой порядковый номер. Порядковый номер называют индексом элемента в массиве. Таким образом, массив представляет собой одну переменную с множеством ячеек памяти для хранения значений, тогда как обычная переменная имеет только одну ячейку, в которой может храниться только одно значение. При необходимости сослаться на все элементы массива можно ссылаться на массив как целое. Возможны также ссылки на его отдельные элементы.
Описание массивов фиксированного размера
Как и другие переменные, массивы описываются с помощью инструкций Dim, Static, Private или Public. Разница между скалярными переменными (т.е. не массивами) и массивами состоит в том, что для последних надо указывать размер массива. Массив с заданным размером называется массивом фиксированного размера. Массив с переменным размером называется динамическим.
Начало индексации массива с 0 или 1 определяется параметрами инструкции Option Base. Если не указано Option Base 1, нижняя граница индексов массива равняется нулю.
Например, для записи денежных затрат на каждый день календарного года можно описать один массив с 365 элементами, вместо того, чтобы описывать 365 переменных. Каждый элемент массива содержит одно значение. Следующая инструкция описывает массив Год с 365 элементами. Так как по умолчанию индексация массива начинается с нуля, то верхняя граница массива - 364, а не 365.
Dim Год(364) As Currency
Чтобы задать значение отдельного элемента, надо указать его индекс.
Например, инструкция, присваивающая пятому элементу массива Год значение 45 выглядит следующим образом:
Год(4)=45
В следующей строке программы массив фиксированного размера описывается как массив типа Integer, имеющий 11 строк и 11 столбцов:
Dim MyArray(10, 10) As Integer
Первый аргумент представляет строки, а второй - столбцы.
Как и при описании других переменных, если тип данных при описании массива не задается, подразумевается, что элементы массива имеют тип Variant. На каждый элемент массива типа Variant отводится 16 байт. Строковый элемент типа Variant занимает 22 байта. Для написания максимально компактной программы следует явно описывать массивы как принадлежащие к типу данных, отличному от Variant. В следующих строках программы сравниваются размерности нескольких массивов:
' Массив Integer занимает 22 байта (11 элементов * 2 байта).
ReDim MyIntegerArray(10) As Integer
' Массив Double-precision занимает 88 байт (11 элементов * 8 байт).
ReDim MyDoubleArray(10) As Double
' Массив Variant занимает не менее 176 байт (11 элементов * 16 байт).
ReDim MyVariantArray(10)
' Массив Integer занимает 100 * 100 * 2 байт (20,000 байт).
ReDim MyIntegerArray (99, 99) As Integer
' Массив Double-precision занимает 100 * 100 * 8 байт (80,000 байт).
ReDim MyDoubleArray (99, 99) As Double
' Массив Variant занимает не менее 160,000 байт (100 * 100 * 16 байт).
ReDim MyVariantArray(99, 99)
Максимальные размеры массива варьируются в зависимости от имеющейся операционной системы и доступной памяти. Использование массивов, превышающих по размеру объем доступной системной оперативной памяти, замедляет работу программы, поскольку при этом данные должны читаться с диска и записываться на диск.