Массивы VBA (ч.2). Объявление и использование массивов
Объявление массивов
Объявление массива с использованием оператора Dim имеет следующий синтаксис:
Dim VarName([Subscripts]) [As Type]
VarName - любое имя массива, использующее допустимый идентификатор имени;
Subscripts - измерение массива. Если размерность массива больше единицы, то Subscripts разделяются запятыми.
Оператор Subscripts имеет следующий синтаксис:
[lower To] upper [,[lower To] upper]..
lower - определяет нижний диапазон допустимых индексов для массива (необязательный аргумент);
upper - определяет верхний предел для индексов массива (обязательный аргумент).
Примеры правильного объявления массивов:
Dim Array_Str (1 To 10) As String - одномерный статический строковый массив, включающий 10 элементов;
Dim Array_Var() - динамический массив;
Dim Array_Mult (0 To 5, 0 To 7) As Integer - двумерный статический массив целых чисел, включающий 6*8=48 элементов.
При объявлении массивов следует помнить, что включение оператора Subscripts в объявлении массива создает статический массив с фиксированным числом элементов, пропуск оператора Subscripts в объявлении массива создает динамический массив, а установка директивы компилятора Option Base влияет на общее число элементов в массиве.
Использование массивов
Для доступа к элементу массива необходимо указывать имя массива, за которым следует значение индекса, заключенное в круглые скобки.
Нижеприведенный листинг показывает элементарное объявление и использование массива (в качестве элементов массива используется факториал номера элемента массива):

При помощи вложенных циклов довольно легко можно организовать инициализацию двумерного массива:

Изменение размерности динамического массива
Могут сложиться обстоятельства, при которых точно неизвестно, сколько элементов потребуется в массиве. В VBA имеется возможность при помощи оператора ReDim переопределять размерность массива, а во время объявления не указывать его размерность.
Синтаксис ReDim:
ReDim [Preserve] varname(subscripts) [As Type] [, varname(subscripts) [As Type]]
varname - имя существующего массива;
subscripts - размерность существующего массива;
Type - любой тип VBA. Необходимо использовать отдельный оператор As Type для каждого массива, который определяется;
Preserve - необязательный аргумент. Его использование приводит к тому, что данные уже имеющиеся в массиве, сохраняются после изменения его размерности.
Примеры правильного использования оператора ReDim:
Dim Array_Month() As String - одномерный строковый динамический массив
ReDim Array_Month(29) - устанавливет размерность динамического массива равную 29 элементам
ReDim Array_Month(1 To 30) - изменяет размер массива до 30 элемента
ReDim Preserve Array_Month(1 To 31) - изменяет размер массива до 31 элемента, сохраняя содержимое
Dim Array_DBL() As Single - объявляет динамический массив
ReDim Array_DBL(2, 9) - делает массив двумерным
ReDim Array_DBL(3, 7) - изменяет размер двумерного массива
ReDim Preserve Array_DBL(1 To 3, 1 To 5) - изменяет последний размер массива, сохраняя содержимое
Обратите внимание! Можно изменять только последнее измерение многомерного массива, когда используется ключевое слово Preserve.