16337

Массивы в VBA

Шпаргалка

Информатика, кибернетика и программирование

Массивы В VBA различают два вида переменных простые переменные и переменные структурного типа. Простые переменные служат для идентификации и резервирования памяти для одного данного. Переменные структурного вида предназначены для идентификации и резервирования па

Русский

2013-06-20

61.5 KB

31 чел.

Массивы

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

Массивы – это формальное объединение нескольких однотипных элементов (чисел, символов, строк и т.д.), упорядоченных по индексам, определяющим положением каждого элемента в массиве.

Пример 1.

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

Значения температур в марте

Число

1

2

3

4

5

6

7

8

9

Т,  0С

-10

-9

-11

-5

0

+3

-1

0

+4

Первая ячейка содержит значение температуры 1 марта, что можно обозначить Т [1] = -10;  Т [2] = -9 и т.д. Заметим, что все ячейки таблицы содержат однотипные данные (Т).

Пример 2.

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

Определение.  

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

Массивом называется ряд ячеек памяти, отведенных для хранения индексной переменной.

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

Номер элемента массива называется его индексом.

Если в форме описания массива задан один индекс, массив называется одномерным, если два индекса – двумерным, если n индексов – n-мерным.

Одномерный массив соответствует понятию линейной таблицы (вектора), двумерный – понятию прямоугольной таблицы (матрицы, набору векторов). Размерность ограничена только объемом памяти конкретного компьютера.

Характеристики массива:

1 Тип – общий тип элементов массива;

2 Размерность – количество индексов массива;

3 Диапазон – количество допустимых значений каждого индекса;

4 Размер – количество элементов массива.

Пример 3.

xi (5, 6, 7) →           размер – 3

                       размерность – 1

                                      тип – integer

                            диапазон – 1..3

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

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

Массивы должны быть объявлены до их использования в программе.

Синтаксис:

Dim | Public | Private Имя_Массива (Размерность_Массива) As Тип_Данных

где

Dim | Public | Private – ключевые слова, декларирующие массив

                                               и область его видимости;

         Имя_Массива – идентификатор, определяющий имя массива;

      Размерность_Массива – значение нижней и верхней границы значения

                                      индекса (номера) соответствующей размерности.

                                      Допускается описание до 60 размерностей.

                              As – ключевое слово, предваряющее указание типа

                                      элементов массива;

            Тип_Данных – любой, действительный для VBA тип данных

                                      (базовый или созданный пользователем).

Пример 1.

Dim A (7) As Integer

Объявляется одномерный массив (вектор) А из 8 целых чисел, причем по умолчанию первый элемент массива будет А(0), а последний А(7).

При объявлении многомерного массива в поле индекса указывается несколько индексов в соответствии с размерностью массива.

Пример 2.

Dim B (4, 5) As Single

Объявляется двумерный массив В 4 х 5 (матрица), состоящая из 5 строк и 6 столбцов действительных чисел.

По умолчанию значение нижнее границы массива при таком объявлении равно нулю. В этом случае говорят, что 0 – базовый индекс массива. Можно изменить базовый индекс, написав в области описания модуля (General Declarations) инструкцию Option Base 1. После этого индексы массивов А и В будут нумероваться с единицы.

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

Пример 3.

Dim A (1 To 7) As Integer

Dim B (1 To 4, 1 To 5) As Single

В этом примере базовому индексу массива установлено значение 1.

Подобным образом моно устанавливать как положительные, так и отрицательные базовые индексы

Пример 4.

Dim Z (-3 To 7) As Single.

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

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

Пример 1.

Dim R () As Single.

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

Пример 2.

ReDim R (1 To 3).

Синтаксическая конструкция переопределения массива:

ReDim [Preserve] Имя_Массива (Размерность_Массива) As Тип_Данных

где

ReDim – ключевое слово, указывающее, что переопределяются размеры массива;

Preserve – необязательное ключевое слово, используемое для сохранения данных в существующем массиве при изменении значения последней размерности. Если оно не используется, то данные в массиве при изменении размерности не сохраняются.

Имя_Массива – имя массива, удовлетворяющее стандартным правилам именования переменных;

Размерность_Массива - значение нижней и верхней границы значения индекса (номера) соответствующей размерности (до 60). Если отсутствует инструкция Option Base, нижняя граница индекса по умолчанию равна 0.

Тип_Данных – тип данных массива.

Пример 3.

Dim A () As Integer   ‘Объявление динамического массива

Dim n As Integer        ‘Объявление переменной, для хранения размерности

N = 9                           ‘Инициализация значения

ReDim A (n)               ‘Одномерный массив из 10 элементов

ReDim A (3 To n, 1 To n)   ‘Двумерный массив с базовыми индексами

Примечание. Оператор ReDim изменяет размерность массива, но не тип его элементов.

Действия над массивами

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

Пример 1.

Если массивы А и В описаны как

Dim A (1 To 2) As Byte, B (1 To 2) As Byte,

то применение к ним допустимой операции даст следующий результат:

Выражение

Результат

A = B

Все значения элементов массива В присваиваются соответствующим элементам массива А. Значения элементов массива В остаются неизменны

Пример 2.

Значение одного массива присваивается другому поэлементно в операторе цикла.

Sub primer ()

Dim A (1 To 2) As Byte, B (1 To 2) As Byte

Dim I As Byte

B(1) = 2

B(2) = 4

For I = 1 To 2

A(i) = B(i)

Debug.Print A(i), B(i)

Next i

End Sub

  

Действия над элементами массива

После объявления массива каждый его элемент можно обрабатывать, указав идентификатор (имя) массива и индекс элемента в круглых скобках.

Пример 1.

Запись

Mas (2), VectorZ (10)

позволяет обратиться к третьему элементу массива Mas и одиннадцатому элементу массива VectorZ.

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

Формирование массива

1 способ.

Формирование массива в программе определяется поэлементно с помощью последовательности операторов.

Пример 1.

Dim B (1 To 2, 1 To 3) As Single

B (1,1) = 2 : B (1,2) = 4 : B (1,3) = 6

B (2,1) = 1 : B (2,2) = 6 : B (2,3) = 2

2 способ.

Формирование массива с помощью датчика случайных чисел.

Пример 2.

Sub primer ()

Dim A(1 To 12) As Variant

Randomize

For i = 1 To 10

A(i) = Rnd (40)     

Debug.Print A(i)

Next i

End Sub               

3 способ

Инициализация элементов массива оператором цикла.

Наиболее эффективно эта операция выполняется с помощью оператора For.

Пример 3.

Dim M (1 To 9, 1 To 9) As Integer

Dim i As Integer

Dim j As Integer

For i = 1 To 9

For j = 1 To 9

M(i, j) = i * j

Next j

Next i

4 способ

Использование функции Array (массив) для задания одномерного массива

Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов, разделенных запятыми, в вектор из этих значений, и присваивающая их переменной типа Variant.

Пример 4.

Sub ShowArray ()

Dim A As Variant

A = Array (10, 20, 30)

Debug.Print A(0)  ‘Отобразится:  10

Debug.Print A(2)  ‘Отобразится:  30

End Sub

Использование функции Array (массив) для задания многомерного массива

Функция Array позволяет задавать не только одномерные, но и многомерные массивы. Это обеспечивается использованием вложенной конструкции с функциями Array.

Пример 5.

Option Base 1

Sub MultiDim ()

Dim A As Variant

A = Array (Array(“Санкт-Петербург“, “Россия“), Array (“Киев“, “Украина“))

Debug.Print A (1) (1)  ‘Отобразится: Санкт-Петербург

Debug.Print A (1) (2)  ‘Отобразится: Россия

End Sub

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

Пример 6.

Private Sub VarArray ()

Dim M As Variant

M = Array(Array(1,2), Array (3,4,5))

Debug.Print M (0) (0), M (1) (2)        ‘Отобразится: 1       5

End Sub