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

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

Статические массивы – это массивы, величина которых известна в начале выполнения программы. Динамические массивы – это массивы, величина которых определяется во время выполнения программы. Но независимо от типа массива имя массива должно быть определено в начале программы. Если это статический массив, то сразу указывается его размерность.

При объявлении массива после его имени в круглых скобках указывается верхняя граница массива. По умолчанию верхней границей считается 0.

 

Dim имя_массива(размерность_1[,размерность_2]) as (тип элементов массива

Где:

имя_массива - имя переменной, определяемое по общим правилам

записи переменной, возможно с указанием типа

хранимых данных;

 

размерность_1; - индексы массива – целые положительные числа.

размерность_2 Индекс массива определяет число элементов в

одном измерении.

Тип элементов массива – определяет значение элементов

массива: «целые числа», «вещественные

числа», «символьные переменные».

 

 

Например,

Dim a(20) as Integer

Объявляется массив из 21 элемента, индекс массива изменяется от 0 до 20.

Можно задавать многомерные массивы, например:

Dim a(20,20) as Integer

Объявляется массив размерностью 21´21.

Другой формат записи оператора Dim позволяет определять индексы массива с произвольного числа.

Dim имя_переменной(нач.зн. TO кон.зн.]) As {тип элементов массива}

Где:

Нач. зн. – начальное значение индекса;

Кон. зн. – конечное значение индекса.

Например:

Dim a(3 to 10) as Integer

В этом случае задается массив из 8 элементов. Индекс элементов массива изменяется от 3 до 10.

 

 

 

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

Создание динамического массива осуществляется следующим образом.

1. Объявляется массив с помощью ключевых слов, используемых при создании массива фиксированного размера. Список размерностей массива остается пустым. Например:

Dim a() as Integer

2.С помощью выполняемого оператора ReDim указывается размерность массива в виде числа или выражения. Синтаксис оператора ReDim аналогичен оператора объявления массива фиксированного размера. Например, размерность массива может быть задана любым из следующих способов:

ReDim a(n) – объявляет массив из n+1 элемента, причем x нужно определить заранее, индекс элемента массива меняется от 0 до x+1;

ReDim a(20) - объявляет массив из 21 элемента, индекс элемента массива меняется от 0 до 21;

ReDim a(1 to 20) - объявляет массив из 20 элементов, индекс элемента массива меняется от 1 до 20.

При объявлении оператора ReDim данные, размещенные в массиве ранее теряются. Это удобно в том случае, если данные вам больше не нужны и вы хотите переопределить размерность массива и подготовить его для размещения новых данных.

Sub prim3()

Dim a(), str_a, i, n

n = Val(InputBox("введите количество элементов массива n:"))

ReDim a(n)

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

ReDim a(4)

For i = 0 To 4

a(i) = Int(Rnd * 100) + 1

str_anew = str_anew & a(i) & " "

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

str_anew

End Sub

 

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

ReDim preserve a(n+1).

Sub prim33()

Dim a(), str_a, i, n

n = Val(InputBox("введите количество элементов массива n:"))

ReDim a(n)

For i = 0 To n

a(i) = Int(Rnd * 100) + 1

str_a = str_a & a(i) & " "

Next i

ReDim Preserve a(n+1)

For i = 0 To n+1

a(n+1)=13

str_anew = str_anew & a(i) & " "

Next i

MsgBox str_a & Chr(10) & Chr(13) & _

str_anew

End Sub