Что такое массив?
Массив это набор элементов одинакового типа, которые имеют общее имя. А обращение к этим элементам происходит по их индексу. Проще говоря, это множество переменных собранных в одну группу по определенному типу. Для более ясного понимания возьмем, например, жемчужные бусы, одни черного цвета, другие белого. Так вот, бусы черного и белого цвета это массивы жемчужин, сгруппированные по цвету, черный и белый, а жемчужины являются элементами этих массивов.
Массивы бывают одномерными (линейными), те же вышеупомянутые бусы и многомерными — двумерные(матрицы, 2D), трехмерные и т.д. Статические — кол-во элементов массива объявляется на этапе разработки и не изменяется в процессе выполнения программы, и динамические — число элементов и размерность изменяется в процессе работы программы.
Объявление статических массивов в VBA
Массив в VB объявляется как обычная переменная, после ключевого слова Dim или Public, с той лишь разницей, что после имени переменной (перед ключевым словом «As«) должны быть скобки.
Dim Mas () as integer
Статические массивы объявляются с указанием верхней и нижней границы:
Dim Mas (2 to 50) as integer
Объявить массив также можно указав только кол-во элементов:
Dim Mas (50) as integer
В этом случае нижняя граница будет установлена по умолчанию 0. Если Вы хотите что бы первым индексом во всех массивах была 1, то Вам необходимо в начале модуля (перед первой процедурой) указать следующее:
Option Base 1
Для объявления многомерных массивов используется запись следующего вида:
Dim Matrix (1 to 10, 1 to 10) as integer
Dim V3D (10, 10,10) as integer ‘трехмерный массив
Dim V4D (10, 10, 25, 5) as integer ‘четырехмерный массив
и т.д.
Объявление динамических массивов в VBA
Динамический массив — не имеет предопределенного кол-ва элементов и определяется без указания в скобках границ:
Dim MyDynMas () as integer
Но динамический массив можно будет использовать только после программного определения границ, после ключевого слова ReDim:
Dim MyDynMas () as integer
‘некоторый код или расчет границ
i=4
Redim MyDynMas (i)
x = i +13
Redim MyDynMas (x)
после переопределения кол-ва элементов массива, все элементы обнуляются. Для того чтобы сохранить значения элементов массива, после ReDim необходимо добавить ключевое слово Preserve:
Redim Preserve MyDynMas (x)
Так же возможно переопределить размерность массивов, например с одномерного на двух-трех-мерный:
Dim MyDynMas () as integer
‘некоторый код или расчет границ
i=4
Redim MyDynMas (i)
x = i +13
Redim MyDynMas (i, x)
но учтите, что при переопределении размерности массива, использование ключевого слова Preserve для сохранения значений элементов — невозможно!
Рассмотрим примеры по работе со статическими и динамическими массивами.
Пример 1:
Дан одномерный массив с тремя элементами и матрица 3х4 (3 строки, 4 столбца). Необходимо умножить каждый элемент одномерного массива со всеми элементами строки матрицы, т.е. 1-й элемент умножаем со всеми элементами первой строки матрицы, 2-й со второй строкой и т.д. Результат вывести в виде матрицы в сообщении.
Option Explicit Sub StatMas()
‘заполняем масивы Matr(1, 1) = 4: Matr(1, 2) = 5: Matr(1, 3) = 1: Matr(1, 4) = 7 Msg = «Результат:» & Chr(13) |
Пример 2:
Двухмерный массив не известной длины заполняется следующим образом Mas(i,j) = i * j. Размеры массива вводятся пользователем с помощью формы InputBox. Результат вывести в сообщении.
Sub DynMasTest() Msg = «Результат:» & Chr(13) col = InputBox(«Введите кол-во столбцов массива», _ For i = 1 To col |
И напоследок, для того чтобы узнать (получить) длину массива воспользуйтесь функцией UBound(). Запись типа UBound(Mas) вернет кол-во элементов одномерного массива. Если же необходимо узнать длину многомерного массива, то функция примет вид UBound(Matr, 2) – вернет кол-во элементов второго измерения, UBound(Matr, 3) – третьего и т.д. Запись же UBound(Matr, 1) равносильна UBound(Mas).
Пример:
Sub GetLengthMas() MsgBox «Размер массива: » & UBound(Matr, 1) & «x» & UBound(Matr, 2) & «x» & UBound(Matr, 3) _ |
Прикрепленный файл: work_mass_vba.zip