Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Динамические массивы
Язык VBA поддерживает также динамические массивы, т. е. массивы размер которых можно изменять после объявления массива. При объявлении динамического массива указываются только круглые скобки без размерности:
Dim Массив() As Integer
Прежде чем использовать динамический массив, необходимо указать его размерность с помощью оператора ReDim
. Оператор имеет следующий формат:
ReDim [Preserve] <Имя массива>(
[<Начальный индекс> To]<Максимальный индекс>[,
..., [<Начальный индекс> To]<Максимальный индекс>])
[As <Тип>]
Указывать размерность массива можно сколько угодно раз, тем самым динамически увеличивая или уменьшая размер массива. Чтобы после изменения размерности данные из старого массива были добавлены в новый массив необходимо указать ключевое слово Preserve
. Если ключевое слово не указать, то новый массив будет пустым. Пример:
Dim Массив() As Integer
ReDim Массив(1)
Массив(0) = 1
Массив(1) = 8
Debug.Print Массив(0) & " - " & Массив(1) ' 1 - 8
ReDim Preserve Массив(3) ' Указано слово Preserve
Массив(2) = 12
Debug.Print Массив(0) & " - " & Массив(1) ' 1 - 8
ReDim Массив(4) ' Не указано слово Preserve
Debug.Print Массив(0) & " - " & Массив(1) ' 0 - 0
Если указано ключевое слово Preserve
, то:
- при использовании многомерных массивов можно изменить только последнюю размерность;
- если размерность массива уменьшается, то не поместившиеся данные будут потеряны;
- измененить тип данных элементов массива нельзя.
Объявить динамический массив можно как тип данных Variant
. В этом случае в операторе ReDim
можно изменить тип данных элементов массива, при условии, что ключевое слово Preserve
не указано. Пример:
Dim Массив As Variant
ReDim Массив(1) As Integer
Массив(0) = 1
Массив(1) = 8
Debug.Print Массив(0) & " - " & Массив(1) ' 1 - 8
ReDim Preserve Массив(2)
Массив(2) = 12
Debug.Print Массив(0) & " - " & Массив(1) & " - " & Массив(2)
' 1 - 8 - 12
Функция Array()
позволяет создать массив и сразу присвоить значения всем его элементам. Функция имеет следующий формат:
<Массив> = Array([<Значение1>[, ..., <ЗначениеN>])
Пример:
Dim Массив As Variant
Массив = Array(1, 8)
Debug.Print Массив(0) & " - " & Массив(1) ' 1 - 8
Нижняя граница создаваемого массива зависит от значения, указанного в инструкции Option Base
. Если инструкция не указана, то нумерация элементов массива начинается с нуля. Чтобы нижняя граница массива не зависела от инструкции Option Base
, необходимо перед названием функции указать VBA
и точку:
Dim Массив As Variant
Массив = VBA.Array(1, 8) ' Не зависит от значения Option Base
Debug.Print Массив(0) & " - " & Массив(1) ' 1 - 8
Если список значений не указан, то создается пустой массив:
Dim Массив As Variant
Массив = Array()
Debug.Print LBound(Массив) & " - " & UBound(Массив) ' 0 - -1
Функцию Array()
удобно использовать также для создания многомерных массивов:
Dim Массив As Variant
Массив = Array(Array(0, 1), Array(2, 3), Array(4, 5))
Debug.Print Массив(0)(1) & " - " & Массив(1)(1) ' 1 - 3
Обратите внимание на обращение к элементам многомерного динамического массива. Каждый индекс указывается внутри круглых скобок Массив(0)(1)
, а не через запятую Массив(0, 1)
, как это было при использовании обычных многомерных массивов.
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов