Объявление массивов

Массивы объявляются так же, как и другие переменные, при помощи операторов Dim, Static, Private или Public Отличие скалярных переменных (которые не являются массивами) от переменных массивов заключается в том, что для массива, как правило, необходимо указывать размер. Массив с указанным размером является массивом фиксированного размера. Массив, размер которого можно изменить во время выполнения программы, является динамическим массивом.

Индексация массива от 0 или 1 зависит от оператора Option Base. Если не указано Option Base 1, все индексы массива будут начинается с нуля.

Объявление статического массива

В приведенном ниже примере кода массив фиксированного размера объявлен массивом целых переменных (Integer) с 11 строками и 11 столбцами:

Dim MyArray(10, 10) As Integer 

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

Как и в случае объявления любой другой переменной, если для объявленного массива не указать тип данных, его элементам будет присвоен тип данных Variant. Каждый числовой элемент Variant массива использует 16 байтов. Каждый строчный элемент Variant использует 22 байта. Чтобы написать как можно более компактный код, четко объявите для своих массивов тип данных, отличный от Variant.

В приведенном ниже примере кода сравниваются размеры нескольких массивов.

' Integer array uses 22 bytes (11 elements * 2 bytes). 
ReDim MyIntegerArray(10) As Integer 
 
' Double-precision array uses 88 bytes (11 elements * 8 bytes). 
ReDim MyDoubleArray(10) As Double 
 
' Variant array uses at least 176 bytes (11 elements * 16 bytes). 
ReDim MyVariantArray(10) 
 
' Integer array uses 100 * 100 * 2 bytes (20,000 bytes). 
ReDim MyIntegerArray (99, 99) As Integer 
 
' Double-precision array uses 100 * 100 * 8 bytes (80,000 bytes). 
ReDim MyDoubleArray (99, 99) As Double 
 
' Variant array uses at least 160,000 bytes (100 * 100 * 16 bytes). 
ReDim MyVariantArray(99, 99) 

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

Объявление динамического массива

Объявив динамический массив, вы сможете менять его размер во время выполнения кода. Используйте операторы Static, Dim, Private или Public, чтобы объявить массив, не указывая значение в скобках, как показано в следующем примере:

Dim sngArray() As Single 

Примечание

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

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

Например, приведенный ниже оператор увеличивает массив на 10 элементов, сохраняя при этом текущие значения исходных элементов.

ReDim Preserve varArray(UBound(varArray) + 10) 

Примечание

При использовании ключевого слова Preserve внутри динамического массива можно менять только верхнюю границу последнего измерения; изменить количество измерений нельзя.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.