End Sub. Динамические массивы

Динамические массивы

End Sub

Номер первого элемента и границы массива

До сих пор во всех примерах массивов мы начинали нумерацию элементов с 1. Как уже упоминалось, можно начинать ее с 0, 1 или любого другого числа. Правил здесь не существует: одни разработчики предпочитают 0, другие — 1. В VBA для выбора между 0 и 1 используется инструкция Option Base, которую помещают начало модуля VBA. Если этой инструкции нет, VBA по умолчанию использует в качестве первого номера 0.

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

Sub НомерПервогоЭлемента()

Dim Data4(4 To 5) As Integer

Data4(4) = lnt(100 * Rnd())

Data4(5) = Int(100 * Rnd())

MsgBox " Выиграли лотерейные номера: " & Data4(4) & ", " & Data4(5)

Здесь описан одномерный 2-элементный массив Data4. Числа, заключенные в круглые скобки после имени массива, задают его нижнюю и верхнюю границы. В данном случае номера двух элементов массива будут равны 4 и 5.

Кроме описанных массивов фиксированного размера в VBA есть массивы еще одного вида – динамические. До сих пор мы всегда явно указывали размерность массива в инструкции. При описании динамического массива его размер не указывается. Он определяется позже, при выполнении кода.

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

Рассмотрим динамический массив подробнее. В процедуре ДинамическийМассив массив Data5 сначала (с помощью инструкции ReDim) объявлен как одномерный 2-элементный массив, а затем как двухмерный 30-элементный.

Sub ДинамическийМассив()

Dim Data5() As Variant

ReDim Data5(2)

Data5(1) = Int(100 * Rnd())

Data5(2) = Int(100 * Rnd())

MsgBox " Выиграли лотерейные номера: " & Data5(1) & ", " _ & Data5(2)

ReDim Data5(10,3)

Data5(1,1) = "Иванов"

Data5(1,2) = #3/21/1947#

Data5(1,3) = Year(Date)-Year(Data5(1,2))

MsgBox Data5(1,1) & ", возраст " & Data5(1,3) & _

", родился " & Data5(1,2)

Сначала в строке 2 мы описали массив Data5 типа Variant, не указывая число измерений и элементов. В этой инструкции определяется динамический массив, но память под него не отводится, пока в строке 3 не встречается инструкция ReDim. В ней массив Data5 объявлен как одномерный 2-элементный массив. В строках 4 и 5 двум элементам этого массива присваиваются случайные числа. В строке 6 эти числа выводятся в информационном окне. В 7-й строке инструкция ReDim используется еще раз для описания Data5 как двухмерного массива, содержащего 30 элементов. Хранившиеся в массиве данные пропадают. Затем элементам первой строки этого массива присваиваются значения и выводятся в информационном окне. Так, позволяя поочередно отводить один и тот же массив под разные данные, инструкция ReDim и динамический массив экономят память при выполнении программы.

Кроме того, динамический массив удобен тогда, когда Вы не знаете, сколько записей будет в вашем массиве. Следующий пример демонстрирует эту ситуацию:

1. Пусть имеется база данных (БД) Excel, в которой хранятся сведения о сотрудниках института (Рис. 3‑2). Количество записей в БД может меняться.

Рис. 3‑2. Фрагмент БД

2. Требуется сформировать двумерный массив с данными о доцентах, работающих в институте. В массиве должна храниться следующая информация: Кафедра, Ф.И.О., Разряд.

Для этого напишем следующий код:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: