Массивы в 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 Предназначены для определения нижней и верхней границ.
|
| Оглавление| |