Microsoft Excel:

  Таблицы и VBA. Справочник.
  Вопросы и Ответы. Советы. Примеры.
Меню Справочник | VBA | Массивы


Rambler's Top100


Counter CO.KZ
Массивы VBA (Visual Basic for Application) используются, как правило, при работе с большим об'емом информации (данных)
Массив - это переменная, содержащая несколько значений и являющаяся по своей сути пронумерованной группой одного и того же типа. Массивы бывают нескольких типов, одномерными и многомерными.
Одномерный массив - это пронумерованный список значений, где каждый элемент этого списка имеет свой уникальный номер. Уникальный номер - это неповторяющийся номер (индекс) каждого элемента массива. В VBA одномерный массив можно представить в виде строки.
Многомерный массив - это более сложная переменная, которая содержит в себе набор списков. В языке VBA допускается описание массивов, имеющих до 60 размерностей, но как правило используются двухмерные массивы. В VBA двухмерный массив можно представить в виде строк и столбцов, поэтому их довольно часто называют таблицами или матрицами.

Об'явление (описание) массива :

Прежде чем использовать массив его необходимо описать прим. * Так как массив является переменной, то действия с массивом во многом похожи на действия с обычными переменными. В массивах используются те же типы данных, что и в обычных переменных, причём массив должен содержать только однотипные данные, однако его ограничение можно обойти, если создать массив типа Variant.

прим. * На самом деле существует функция Array, которая позволяет создавать массив в ходе выполнения программы, без предварительного описания.

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

Об'явление одномерного фиксированного массива :

Dim iString(3) As String

Об'явление двухмерного фиксированного массива :

Dim iData(5, 2) As Double

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

Dim iWhatIs() As Integer

Динамический массив :

При об'явлении (описании) динамического массива его размер не указывается. В процессе выполнения программы его размер может изменяться, причём неоднократно. Поэтому динамический массив применяют, если предполагается, что размер массива не будет постоянным.

ReDim - инструкция, которая позволяет изменять динамический массив.

Dim iWhatIs() As Integer

ReDim iWhatIs(5)

ReDim iWhatIs(10)


Примечание :
Обратите внимание на то, что элементы массива, которые были созданы ранее, после использования ReDim не сохраняются.

ReDim Preserve - инструкция, которая позволяет изменять динамический массив, с сохранением всех элементов массива.

Dim iWhatIs()

ReDim Preserve iWhatIs(2)
iWhatIs(0) = 1
iWhatIs(1) = 2
iWhatIs(2) = 3

ReDim Preserve iWhatIs(3)
iWhatIs(3) = 4


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

Номер первого элемента по умолчанию начинается с 0, для того чтобы изменить нумерацию используйте инструкцию Option Base или используйте явное указание номера первого элемента.


Пример фиксированного массива, где нумерация элементов начинается с 1

Option Base 1

Dim iString(3) As String

Dim iData(5, 2) As Double


Примечание :
Инструкцию Option Base необходимо расположить в самом начале модуля VBA.

Пример об'явления фиксированных массивов с явным описанием нижней границы :

Dim iString(1 To 3) As String

Dim iData(1 To 5, 1 To 2) As Double

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

Dim iString(5 To 10)

Dim iData(1 To 5, 2 To 5)

Примечание : Указывать тип данных содержащихся в массиве вовсе не обязательно. В случае отсутствия явного описания типа массива, он будет представлен как тип Variant.


Макрофункции для работы с массивом :

Array - функция позволяет создавать массив в ходе выполнения программы, без предварительного описания.

iArray = Array("ivan", "john", "maurizio")

Erase - функция используется для удаления данных, хранимых в элементах массива. Массив фиксированного размера очищается полностью, но память, отведённая под его хранение остаётся за ним. Динамический же массив уничтожается полностью.

Erase iString

Erase iData

Erase iWhatIs

IsArray - функция проверяет, является ли переменная массивом. IsArray имеет всего один аргумент (переменную) и в зависимости от результатов проверки возвращает True - если переменная является массивом, или False - если нет.

Пример проверки динамического массива :

Dim iArray()

ReDim Preserve iArray(1 To 3)
iArray(1) = "ivan"
iArray(2) = "john"
iArray(3) = "maurizio"

ReDim Preserve iArray(1 To 4)
iArray(4) = "it's very good man's"

If IsArray(iArray) = True Then
MsgBox "iArray - это массив", , ""
Else
MsgBox "iArray - это не массив", , ""
End If


Пример проверки массива, созданного с помощью функции Array :

iArray = Array("ivan", "john", "maurizio")

If IsArray(iArray) = True Then
MsgBox "iArray - это массив", , ""
Else
MsgBox "iArray - это не массив", , ""
End If


LBound - функция определит нижнюю границу массива.
UBound - функция определит верхнюю границу массива.

Dim iData(5 To 15, 1 To 100) As Double
iLBound = LBound(iData)
iUBound = UBound(iData)

MsgBox "Нижняя граница массива : " & iLBound & Chr(10) _
& "Верхняя граница массива : " & iUBound, , ""


Совет : Применение функций LBound, UBound к обычной переменной или динамическому массиву, который ещё не был описан инструкцией ReDim, вызовет ошибку. Не забывайте проверять переменную, используя функцию IsArray.

Воспроизведение любых опубликованных здесь материалов возможно только с письменного разрешения автора : Microsoft Excel 95, 97, 2000, XP
© 2004-2016 Климов П.Ю. Все права защищены. WebDesign & Error's Klimoff