16337

Массивы в VBA

Шпаргалка

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

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

Русский

2013-06-20

61.5 KB

32 чел.

Массивы

В 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

 



 

А также другие работы, которые могут Вас заинтересовать

21657. ЗАТУХАНИЕ 160 KB
  ЗАТУХАНИЕ Важнейшими параметрами световода являются оптическое потери и соответственно затухание передаваемой энергии. Собственные потери волоконных световодов состоят в первую очередь из потерь поглощения и потерь рассеивания т. Потери на поглощение существенно зависят от частоты материала и при наличии посторонних примесей могут быть значительными. Потери обусловлены комплексным характером показателя преломления nдjnм который связан с тангенсом угла диэлектрических потерь выражением .
21658. Гидрология болот 114 KB
  Вместо высоких камышей и тростников развиваются мелководные растения хвощи осоки и многие другие водолюбивые растения отложения которых хотя и поднимаются над поверхностью воды в озере но затопляются весенними и летними высокими водами отлагающими принесенные или взмученные частицы ила. В климатических условиях северной половины России осадков выпадает больше чем расходуется влаги на испарение поэтому излишек воды скапливается на поверхности болота сначала в форме мочажин а затем в виде вторичных озер и русел...
21659. Гидрология подземных вод 318 KB
  Долгое время существовали две теории отрицавшие одна другую: теория инфильтрации в которой утверждалось что скопление подземной воды есть результат просачивания атмосферных осадков в почву и грунт теория конденсации доказывающая что источником происхождения подземных вод является водяной пар атмосферы который вместе с воздухом попадает в холодные слои земной коры и там конденсируется. Воды возникают на больших глубинах из диссоциированных ионов Н и О2 или паров воды поднимающихся из магматической или метаморфической зоны....
21660. Гидрология рек 346.5 KB
  Главные реки и их притоки. Речная система включает в себя одну главную реку ряд притоков главной реки притоки этих притоков и т. Реки непосредственно впадающие в главную реку называются притоками первого порядка. Притоки второго порядка по отношению к главной реке реки впадающие в притоки первого порядка и т.
21661. ГЕОЛОГИЧЕСКАЯ ДЕЯТЕЛЬНОСТЬ ОКЕАНОВ И МОРЕЙ 78.5 KB
  Приливноотливные движения периодические поднятия и опускания уровня воды в океанах и морях возникают в результате того что Земля испытывает притяжение Луны и Солнца. РАЗРУШИТЕЛЬНАЯ ДЕЯТЕЛЬНОСТЬ МОРЯ Разрушительная деятельность моря называется абразией. К тому же между подводной абразионной террасой и клиффом возникает пляж представляющий гряды или насыпи гальки гравия иногда песка полого спускающиеся в сторону моря. При поперечном подходе волн к берегу в зоне прибоя в пределах пляжа часто формируются валы из...
21662. Химические и физические свойства природных вод 117 KB
  Основные физические свойства воды снега и льда Общие сведения. При анализе гидрологических явлений принимается что количество свободной воды на Земле сохраняется постоянным. Вода в результате некоторых процессов вступает в прочные соединения с другими веществами и перестает существовать как свободное образование однако в глубоких слоях земной коры имеют место и обратные процессы: при высоких давлениях и температурах вновь образуется некоторое количество воды. Температура замерзания дистиллированной воды принята за 0 С а температура...
21663. Гидрология озер 174 KB
  Гидрология озер Происхождение типы и морфология озерных котловин Озерами называются котловины или впадины земной поверхности заполненные водой и не имеющие прямого соединения с морем. Согласно приведенному определению к озерам могут быть отнесены и такие крупные водоемы как Каспийское и Аральское моря а также сравнительно небольшие временные скопления воды в понижениях местности образующиеся например в период весеннего снеготаяния. Иногда в отличие от текущих вод рек озера определяют как водоемы с замедленным стоком или с...
21664. Гидрология водохранилищ 70.5 KB
  Водохранилища в зависимости от их морфологических и гидрологических особенностей можно разделить на несколько групп. Течения в этих водохранилищах связаны больше всего с ветрами. Поэтому озерные водохранилища не имеют четко выраженной русловой формы и многократного превышения длины над максимальной шириной. Основными параметрами водохранилища являются объём площадь зеркала и амплитуда колебания уровней воды в условиях его эксплуатации.
21665. Гидрология ледников 62 KB
  Благодаря режеляции происходит слияние двух ледниковых потоков в один фирновые зерна смерзаются в плотную ледяную массу заплывают трещины в ледниках и т. Таким образом ледник может быть разделен на две части: верхнюю где преобладает накопление снега и льда фирновый бассейн или бассейн питания нижнюю где происходит стаивание ледника область стока область абляции язык ледника. Многочисленные наблюдения и специально поставленные опыты показали что течение ледника сходно с течением водного потока. Скорость движения льда в...