массивы

Preview:

Citation preview

ВыходВыход

Тема:Тема:

Массив - индексированная группа данных, которая обрабатывается как единая переменная. Порядок элементов в массиве задается индексами его элементов.

ВыходВыход

Массивы могут быть: •одномерные и многомерные; •статические и динамические.

ВыходВыход

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

Ёлка (1) Ёлка (2) Ёлка (3) Ёлка (4) Ёлка (5) Ёлка (6) Ёлка (7)

Имя массива

Индекс массива

ВыходВыход

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

Ёлка (1,1)Ёлка (1,2) Ёлка (1,3)Ёлка (1,4) Ёлка (1,5)Ёлка (1,6)Ёлка (1,7)

Ёлка (2,1)Ёлка (2,2) Ёлка (2,3)Ёлка (2,4) Ёлка (2,5)Ёлка (2,6)Ёлка (2,7)

Ёлка (3,1)Ёлка (3,2) Ёлка (3,3)Ёлка (3,4) Ёлка (3,5)Ёлка (3,6)Ёлка (3,7)

стро

киСтолбцы

ВыходВыход

Статические массивы имеют фиксированное количество элементов, определённое при объявлении массива.

ВыходВыход

Чтобы создать массив, нужно определить: его имя, количество элементов (размер массива), тип данных, которые будут храниться в массиве.

Синтаксис объявления:Dim ИмяМассива (размер) As ТипДанных

ВыходВыход

Пример:Dim МойМассив(3) As IntegerСоздан массив по имени

МойМассив, состоящий из четырех элементов и способный хранить значения типа Integer.

ВыходВыход

Другая версия задания массива: указать первый и последний номера элементов массива:

Dim МойМассив (1 То 3) As Integer

ВыходВыход

Элементы созданного массива не содержат никаких данных. Чтобы сохранить в массиве какое-нибудь значение, нужно указать, какому элементу оно должно быть присвоено.

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

Dim Сотрудник(4) As StringЕсли необходимо первому элементу

массива присвоить значение Иван Никитин, надо прописать такой код:

Сотрудник(0) = “Иван Никитин”ВыходВыход

Объявление одномерного массиваПример 1:Option Base 0‘одномерный массив из 11 эл-тов, первый эл-т ‘массива Spisok1(0) Dim Spisok1(10) As Long‘одномерный массив из 10 эл-тов, первый эл-т ‘массива Spisok2 (1)Dim Spisok2(1 to 10) As Long

Пример 2:Option Base 1‘одномерный массив из 10 эл-тов, первый эл-т ‘массива Elka(1) Dim Elka(10) As Byte

ВыходВыход

Порядок создания двухмерного массива тот же, что и одномерного, с той лишь разницей, что, указывая его размер, нужно указать два значения – строки и столбцы:

Dim ДвухММассив (Строки, Столбцы) As ТипДанных

ВыходВыход

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

Пример 3:‘двумерный массив 11 строк×26 столбцовDim Spisok2(10, 25) As Long‘двумерный массив с указанием начальных ‘границDim SpisokGr(1 To 10, 5 To 50) As String

ВыходВыход

Способы вывода элементов двумерного массива

Пример 6:st = ""For i = 1 To 5st = "" For j = 1 To 5 st = st & " " & m(i, j) Next j Debug.Print stNext i Пример 7:

For i = 1 To 5 For j = 1 To 5 Sheets(1).Cells(i, j) = m(i, j) Next jNext i

ВыходВыход

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

Это можно сделать несколькими способами:

ВыходВыход

Инициализация элементов массива

Ёлка (1,1)Ёлка (1,2) Ёлка (1,3) Ёлка (1,4) Ёлка (1,5)Ёлка (1,6)Ёлка (1,7)

Ёлка (2,1)Ёлка (2,2) Ёлка (2,3) Ёлка (2,4) Ёлка (2,5)Ёлка (2,6)Ёлка (2,7)

Ёлка (3,1)Ёлка (3,2) Ёлка (3,3) Ёлка (3,4) Ёлка (3,5)Ёлка (3,6)Ёлка (3,7)

ВыходВыход

Способы инициализацииПример 4:‘последовательностью операторов:Dim B(1, 1) As SingleB(0, 0) = 2: B(0, 1) = 4B(1, 0) = 1: B(1, 1) = 3Пример 5:‘оператором цикла:Dim m(1 To 5, 1 To 5) As IntegerDim i, j As IntegerFor i = 1 To 5 For j = 1 To 5 m(i, j) = i * j Next jNext i

ВыходВыход

Выбор размера массива может быть затруднен, если неизвестно, сколько данных будет введено в массив, или если объем данных, собираемых для массива, значительно меняется. Для подобных ситуаций VBA поддерживает особый тип массивов, называемый динамическим (dynamic) массивом.

ВыходВыход

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

При помощи ключевого слова ReDim можно в любой момент изменить размерность динамического массива. Если указать ключевое слово Preserve, VBA сохранит все имеющиеся элементы массива, в противном случае данные, содержащиеся в массиве, удалятся.Пример объявления: Dim MyArray() As String

ВыходВыход

Решение задач с использованием динамического массива

Public Sub do_true_end()Dim arr() As IntegerDim i As ByteIndexArr = 0Do IndexArr = IndexArr + 1 ReDim Preserve arr(IndexArr) arr(IndexArr) = InputBox("Введите элемент _ массива:")Loop While arr(IndexArr) >= 0 And _

IndexArr < 255End Sub

ВыходВыход

Public Sub ArrayFunc()Dim m(1 To 5, 1 To 5) As IntegerDim i, j As IntegerFor i = 1 To 5st = "" For j = 1 To 5 m(i, j) = CInt(7 * Rnd) st = st & " " & m(i, j) Next j Debug.Print stNext icol = 0For i = 1 To 5 For j = 1 To 5 If m(i, j) = 0 Then col = col + 1 Exit For End If Next jNext iDebug.Print "В массиве " & col & " строк содержат 0"End Sub

ВыходВыход

В системе нумерации с нулевой базой индекс для первого элемента в любом измерении массива является равным 0; массив с 10 элементами имеет индексы от 0 до 9.

VBA позволяет задавать начальное число для элементов массива, используя директиву компилятора Option Base для указания того, должна ли нумерация индексов начинаться с 0 или с 1.

ВыходВыход

Необходимо помещать оператор Option Base в область объявлений модуля перед объявлениями любых переменных, констант или процедур. Нельзя помещать оператор Option Base внутри процедуры. Можно иметь только один оператор Option Base в модуле; оператор Option Base влияет на все массивы, объявляемые в модуле, независимо от того, являются ли они локальными в процедуре или объявляются на модульном уровне.

Например:Option Base 0 'установка по умолчанию с нуляOption Base 1 'индексы массивов начинаются с 1

ВыходВыход

При работе с массивами можно применять следующие функции и процедуры:

1. Array (списокАргументов)Создает массив типа Variant. Аргумент в

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

Пример:Dim День As VariantДень=Array(«Пн»,"вт","ср",….)

ВыходВыход

Определение границ индексов массива

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

ВыходВыход

Lbound (имяМассива [, размерность])Ubound (имяМассива [, размерность]),где имяМассива – имя переменной

массива;размерность – целое число,

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

ВыходВыход

Recommended