Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ПОП.doc
Скачиваний:
4
Добавлен:
27.10.2018
Размер:
284.67 Кб
Скачать

5. Массивы. Встроенные функции для работы с массивами.

  Глобальные и локальные переменные, общих (Public) и закрытых (Ptivate), двух уровнях объявления, — относится и к массивам. Появляется только единственное дополнение, связанное с необходимостью указать размерность массива и границы изменения индексов.

  локальный массив

  глобальный  массив

  Dim <Агг> (размерность) As <type>

  Public <Агг> (размерность) As <type>

  где <Arr>— имя массива,  (размерность)— размерность массива. Например:

  Размерность массива   

  Обозначение размерности   

  Комментарий и примеры   

  Одномерный   

  (число)   

  Dim Ball (5) as Integer — 6 элементов массива, индекс элементов начинается с 0   

     

  (число1 То число2)   

  Dim Basket (45 То 74) as Single — 30 элементов массива   

  Двухмерный   

  (число1, число2)   

  Dim Foot (1, 3) as Long — 8 Элементов массива:                 

   Foot (0, 0) Foot (0, 1 ) Foot (0, 2) Foot (0, 3)

   Foot (1, 0) Foot (1, 1) Foot (1, 2) Foot (1, 3)

  

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

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

  Если  затем нужно изменить границы  или размерность массива, Вы можете снова задать оператор переопределения ReDim и начать новый цикл работы с массивом. И еще одна “приятность” — можно сохранить все ранее полученные элементы и расширить массив, добавив новые элементы. Для этого надо просто задать ключевое слово Preserve при переопределении массива. Рассмотрим пример. На уровне модуля объявим глобальный динамический массив Vector:

  Public Vector() As Integer

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

  Public Sub DMassiv()

  Dim N As Byte, I As Byte

  N = InputBox ("Введите фактическую размерность вектора")

  ReDim Vector(N)

  For I = 1 to N

  Vector(I) = 2*I+1

  Next I

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

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

  • Array() — позволяет автоматически создать массив нужного размера и типа и сразу загрузить в него переданные значения:

  Dim myArray As Variant             myArray = Array(10,20,30)                 MsgBox(A(2))

  • Filter() — позволяет на основе одного массива получить другой, отфильтровав в исходном массиве нужные нам элементы.

  • LBound() — возвращает информацию о нижней границе массива (то есть номере первого имеющегося в нем значения), а UBound() — о верхней (номер последнего имеющегося значения).

  • Join() — возможность слить множество строк из массива строк в одну строковую переменную. В качестве разделителя по умолчанию используется пробел, можно указать свой разделитель. Обратная функция, создающая массив из одной строки — Split(). Эти функции очень удобны, например, при обработке значений, полученных из базы данных, электронной таблицы, макетного файла и т.п.