Одномерные и многомерные массивы



Одномерные массивы

Объявление одномерных (линейных) массивов в VBA Excel:

1 2 PublicMassiv1(9) AsInteger DimMassiv2(1 To9) AsString

В первом случае публичный массив содержит 10 элементов от 0 до 9 (нижний индекс по умолчанию - 0, верхний индекс - 9), а во втором случае локальный массив содержит 9 элементов от 1 до 9.

По умолчанию VBA Excel считает в массивах нижним индексом нуль, но, при желании, можно сделать нижним индексом по умолчанию единицу, добавив в самом начале модуля объявление «Option Base 1». Вместо верхнего индекса можно использовать переменную.

Многомерные массивы

Объявление многомерных массивов в VBA Excel аналогично объявлению одномерных массивов, но с добавлением размерностей дополнительных измерений через запятую:

1 2 3 4 5 6 'Массивдвухмерный PublicMassiv1(3, 6) AsInteger 'Массивтрехмерный DimMassiv2(1 To6, 1 To8, 1 To5) AsString 'Массив четырехмерный DimMassiv3(9, 9, 9, 9) AsDate

Третий массив состоит из 10000 элементов - 10×10×10×10.

Статические и динамические массивы

Объявление статических массивов в 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:

RedimPreserve 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 Option Base 1 Sub StatMas() Dim Mas(3) As Integer Dim Matr(3, 4) As Integer Dim Msg As String Dim i, j As Integer 'заполняем масивы Mas(1) = 2: Mas(2) = 4: Mas(3) = 6 Matr(1, 1) = 4: Matr(1, 2) = 5: Matr(1, 3) = 1: Matr(1, 4) = 7 Matr(2, 1) = 12: Matr(2, 2) = 10: Matr(2, 3) = 2: Matr(2, 4) = 9 Matr(3, 1) = 24: Matr(3, 2) = 11: Matr(3, 3) = 6: Matr(3, 4) = 3 Msg = "Результат:" & Chr(13) For i = 1 To 3 For j = 1 To 4 Matr(i, j) = Matr(i, j) * Mas(i) 'добавляем результат в строку сообщения, резделитель TAB (chr(9)) Msg = Msg & CStr(Matr(i, j)) & Chr(9) Next j 'добавляем перенос на новую строку chr(13) Msg = Msg & Chr(13) Next i MsgBox Msg End Sub

Пример 2:
Двухмерный массив не известной длины заполняется следующим образом Mas(i,j) = i * j. Размеры массива вводятся пользователем с помощью формы InputBox. Результат вывести в сообщении.


Дата добавления: 2018-02-28; просмотров: 454; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!