На главную Напишите нам! Напишите нам!
18-04-2024
колонтитул в word 2007, 0000002111

Массивы VBA. Понятие и размерность массива.

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

Массив позволяет сохранять и манипу- лировать многими элементами данных посредством единственной перемен- ной. Обработку массивов значительно упрощает использование циклов.

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

Одномерный массив - это самый простой вариант массива, использующий обыкновенный список данных. Например: Вася, Петя, Коля, Миша, Ваня, Слава, Игорь, Юра, Саша, Вова Это строковый массив, состоящий из 10 элементов. Дадим ему название My_Array.

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

Для доступа к данным, хранящимся в определенном элементе массива, следует указывать имя массива с последующим числом, называемым индексом элемента. Индекс всегда заключается в круглые скобки. Например: My_Array(3) - этому элементу нашего массива соответствует "Миша" (не забывайте, что по умолчанию нумерация элементов массива начинается с 0).

Поскольку нумерация с нулевой базой не очень удобна (т.к. мы привыкли считать с 1, а не с 0), то в VBA имеется директива компилятора, позволяющая исправить это "неудобство": Option Base.

Директива компилятора имеет два варианта написания: Option Base 0 - индексы массивов начинаются с 0 (установка по умолчанию) Option Base 1 - индексы массивов начинаются с 1 Данная директива компилятора помещается в область объявлений модуля перед объявлениями любых переменных, констант или процедур. Нельзя помещать Option Base внутри процедуры. Можно иметь только один оператор Option Base в модуле, который влияет на все массивы, объявляемые в модуле.

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

Одномерные массивы хорошо подходят для представления простых списков данных. Однако часто бывает необходимо представить таблицы данных в программах с организацией данных в формате строк и столбцов, подобно ячейкам в рабочих листах Excel. Для этого необходимо использовать многомерные массивы. Так адрес каждой ячейки листа состоит из двух чисел, одно из которых (номер строки) является первым индексом, а второе (номер столбца) - вторым индексом массива. Такой массив называется двумерным массивом. Добавив еще номер листа, получим трехмерный массив. VBA позволяет создавать массивы, имеющие до 60 измерений.

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

Массивы, не меняющие число своих элементов, называются статическими массивами. Примером такого массива может служить вышеприведенный массив My_Array, содержащий 10 элементов.

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

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

Массивы VBA - объявление и использование массивов

Объявление массивов

Объявление массива с использованием оператора Dim имеет следующий синтаксис:

Dim VarName([Subscripts]) [As Type] VarName - любое имя массива, использующее допустимый идентификатор имени; Subscripts - измерение массива. Если размерность массива больше единицы, то Subscripts разделяются запятыми.

Оператор Subscripts имеет следующий синтаксис:

[lower To] upper [,[lower To] upper].. lower - определяет нижний диапазон допустимых индексов для массива (необязательный аргумент); upper - определяет верхний предел для индексов массива (обязательный аргумент).

Примеры правильного объявления массивов: Dim Array_Str (1 To 10) As String - одномерный статический строковый массив, включающий 10 элементов; Dim Array_Var() - динамический массив; Dim Array_Mult (0 To 5, 0 To 7) As Integer - двумерный статический массив целых чисел, включающий 6*8=48 элементов.

При объявлении массивов следует помнить, что включение оператора Subscripts в объявлении массива создает статический массив с фиксированным числом элементов, пропуск оператора Subscripts в объявлении массива создает динамический массив, а установка директивы компилятора Option Base влияет на общее число элементов в массиве.

Использование массивов

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

Нижеприведенный листинг показывает элементарное объявление и использование массива (в качестве элементов массива используется факториал номера элемента массива):

При помощи вложенных циклов довольно легко можно организовать инициализацию двумерного массива:

Изменение размерности динамического массива

Могут сложиться обстоятельства, при которых точно неиз- вестно, сколько элементов потребуется в массиве. В VBA имеется возможность при помощи оператора ReDim переопределять размерность массива, а во время объявления не указывать его размерность.

Синтаксис ReDim:

ReDim [Preserve] varname(subscripts) [As Type] [, varname(subscripts) [As Type]] varname - имя существующего массива; subscripts - размерность существующего массива; Type - любой тип VBA. Необходимо использовать отдельный оператор As Type для каждого массива, который определяется; Preserve - необязательный аргумент. Его использование приводит к тому, что данные уже имеющиеся в массиве, сохраняются после изменения его размерности.

Примеры правильного использования оператора ReDim: Dim Array_Month() As String - одномерный строковый динами- ческий массив ReDim Array_Month(29) - устанавливет размерность динамического массива равную 29 элементам ReDim Array_Month(1 To 30) - изменяет размер массива до 30 элемента ReDim Preserve Array_Month(1 To 31) - изменяет размер массива до 31 элемента, сохраняя содержимое Dim Array_DBL() As Single - объявляет динамический массив ReDim Array_DBL(2, 9) - делает массив двумерным ReDim Array_DBL(3, 7) - изменяет размер двумерного массива ReDim Preserve Array_DBL(1 To 3, 1 To 5) - изменяет последний размер массива, сохраняя содержимое

Обратите внимание! Можно изменять только последнее измерение многомерного массива, когда используется ключевое слово Preserve.

Функции LBound, UBound

Функции LBound, UBound возвращают нижнее и верхнее граничные значения индексов статического или динамического массива.

Синтаксис: LBound (array_Name [, dimension]) UBound (array_Name [, dimension]) array_Name - имя массива dimension - целое число (необязательный аргумент). Определяет измерение массива, для которого надо получить верхний или нижний предел. При отсутствии dimension возвращается предел для первого измерения массива.

Нижеприведенный листинг демонстрирует использование функций LBound, UBound:

Очистка и удаление массивов при помощи Erase

Оператор Erase позволяет выполнять очистку для статических массивов и удаление - для динамических.

Когда элементы массива заполнены, данные в массиве остаются до тех пор, пока пользователь не присвоит новые значения элементам массива или пока VBA не освободится от массива. Зачастую бывает, что в дальнейших вычислениях динамический массив ни при каких обстоятельствах использоваться не будет, поэтому нецелесообразно "держать" его в памяти компьютера, т.к. это может сказаться на скорости работы программы. Или же может понадобиться очистить все значения в статическом массиве, устанавливая числовые значения на 0, а строковые - на пустые строки. Это можно осуществить при помощи вложенных циклов - как было показано на предыдущем уроке. Но, можно сделать гораздо проще:

Erase My_Array

Данный оператор обнуляет (если массив статический) или очищает (если массив динамический) массив My_Array.

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

Поведение оператора Erase для статических массивов зависит от конкретного типа элементов массива (см. таблицу):

Тип статического массива Действие оператора Erase
Любой числовой тип Устанавливает элементы массива на 0
Любой строковый тип Устанавливает элементы массива на строку нулевой длины, а для строк фиксированной длины - как все символы пробела
Тип Variant Устанавливает элементы массива на Empty
Тип Object Устанавливает элементы массива на Nothing
Любой пользовательский тип Устанавливает каждую переменную в пользовательском типе индивидуально: численные - на 0; строковые - на строки нулевой длины; Variant - Empty; Object - Nothing
колонтитулы в word 2007, 000000211111

Рекомендуем в повседневной деятельности:

Скачать - инструкцию по созданию загрузочной флешки = 50,02мин. 20.04.2014г.
Скачать - правила получение аттестата Webmoney  (30.61 MB) = 7. 5 мин. 11.01.2013г.
Скачать ссылки на каталоги - для регистрации сайта (69.5 MB) = 9. 7 мин. 01.10.2013г.
Скачать - wifi router настройка модема (41.72 MB) = 7 мин. 46 сек. 26.01.2013г.
Скачать - TDSSKiller диагностика, лечение систем (24,71 MB) = 6,02 мин. 01.12.2012г.
Скачать - пример готового проэкта в Lazarus (91,59 MB) = 1,31мин. 08.04.2013г.
Скачать - правила установки MySQL в Lazarus (20,17 MB) = 4,55 мин. 25.02.2013г.
Класс!
 
Яндекс.Метрика
Копирование возможно при указании прямой индексируемой гиперссылки
п»ї
0000002