Microsoft Office (Разработка документов в Word, Excel и приложений на Visual Basic for Application). - Учебное пособие (Н.А.Устинов)

Массивы в vba.

Массив – ‘это индексированная группа значений одного и того же типа.

Одномерный массив  - это просто индексированный список значений. Список имеет начало (первый элемент) и конец (последний элемент), при этом каждый элемент массива имеет уникальный индекс (номер).

Двумерный массив представляется матрицей.

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

Массивы в VBA имеют до 60 измерений.

Описание массивов похоже на описание переменных. Приведем примеры:

Dim StrArray(10) As String: Dim IntTable(100,50)  As Integer:

В первом массиве 10 элементов, во втором массиве 100 строк и 50 столбцов.

По умолчанию нижняя граница устанавливается равной 0. Для того чтобы установить нижнюю границу равной 1 используйте оператор «Option Base»

Примеры использования массивов.

Рассмотрим следующий пример использования массива.

Sub Lect11Proc04_IntegerArray()

    Dim Val’s (3) As Integer

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

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

    Vals(3) = Int(100 * Rnd())

    MsgBox "Выигрышные номера: " & Vals(1) & ", " & _

            Vals(2) & ", " & Vals(3)

End Sub

В данной процедуре элементам одномерного массива присваиваются случайные числа от 0 до 100

 

Приведем пример использования массива элементов типа Variant.

В процедуре демонстрируется пример использования одномерного массива элементов типа Variant для хранения данных разных типов.

Sub Lect11dProc05_VariantArray()

    Dim Val5(3) As Variant

    Val5(1) = "$"

    Val5(2) = 13.84

    Val5(3) = #11/30/02#

    MsgBox Val5 (1) & ", США " & "стоит " & Val5 (2) & " на " & Val5 (3)

End Sub

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

Выше Мы рассмотрели примеры использования массивов с фиксированными размерами. В этих массивах размеры задавались в операторе описания массива.

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

Рассмотрим пример использования динамического массива:

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

Sub Lect11Proc06_UseDynamicArray()

    Dim Data4() As Variant

    ReDim Val6(2)

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

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

    MsgBox "Выигрышные номера: " & Val6 (1) & ", " & Val6 (2)

    Val7 = Val6(2)

    ReDim Val6(Val7)

    MsgBox "Размер массива: " & Val7

End Sub

Задание границ массива.

Можно задать индексацию массивов с любого выбранного числа. Для этого нужно задать нижнюю и верхние границы. Рассмотрим пример:

Пример массива с нижней границей, равной 4 и верхней границей, равной 5.

Sub Lect11Proc07_UseArrayBounds()

    Dim Val7(4 To 5) As Integer

    Val7(4) = Int(100 * Rnd())

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

    MsgBox "Выигрышные номера: " & Val7(4) & ", " & Val7(5)

End Sub

Функции для работы с массивами.

Рассмотрим наиболее часто используемых функций для работы с массивами, их пять: Array, Erase, IsArray, Lbound, Ubound.

Array

Позволяет создавать массив во время выполнения программы без предварительного описания:

'Пример использования функции Array.

Sub Lect11Proc08_ArrayFunction()

    Val8 = Array("Петров", 85, #3/21/1913#)

    MsgBox Val8(1) & ", возраст " & Val8(2) & ", родился " & Val8(3)

End Sub

 Erase

Используется для очистки массива. Для массивов фиксированных размеров эта функция очищает все значения массива, но не изменяет размер памяти. Для динамических массивов эта функция не только очищает все значения массива, но также освобождает память, занимаемую массивом.

'Пример использования функции Erase.

Sub Lect11Proc09_EraseFunction()

    Dim Val9(2) As Integer

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

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

    MsgBox "Выигрышные номера: " & Val9(1) & ", " & Val9(2)

    Erase Val9

    MsgBox "Выигрышные номера: " & Val9(1) & ", " & Val9(2)

End Sub

 

 IsArray

Позволяет проверять, является ли переменная массивом. IsArray имеет один аргумент возвращает значение "True", если аргумент является массивом и "False" в противном случае.

'Пример использования функции IsArray.

Sub Lect11Proc10_IsArrayFunction()

    Dim Val10(2) As Integer

    Dim ArrayBool As Boolean

    ArrayBool = IsArray(Val10)

    If ArrayBool = True Then

        MsgBox "Val10 - массив."

    End If

End Sub

 

 Lbound, Ubound

Предназначены для определения нижней и верхней границ.