Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA For Excel Часть 01.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.16 Mб
Скачать

5.2.6 Массивы массивов

В языке VBA возможно присвоить ячейке массива типа Variant значение другого массива.

Имя_Массива1(Индекс_Ячейки) = Имя_Массива2( )

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

Dim A(1 To 2) As Long

Dim B(1 To 3) As Long

Dim C(1 To 2) As Variant

A(1) = 1

A(2) = 2

B(1) = 5

B(2) = 6

B(3) = 7

‘Присваиваем ячейке C(1) массив A

C(1) = A( )

‘Присваиваем ячейке C(2) массив B

C(2) = B( )

n = C (1) (2)

n1 = C (2) (1)

После выполнения указанного нами выше фрагмента программы значение переменных n, n1 будет следующие:

n = 2

n1 = 5

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

5.2.7 Поиск максимума и минимума в массиве

В примере ниже показан поиск максимума и минимума ячеек и их индексов в массиве A, индексы которых лежат в диапазоне 1-N:

‘Переменные для поиска максимального значения в массиве и индекса ячейки с максимальным значением

Максимум = A(1)

ИндексМаксимума =1

‘Переменные для поиска минимального значения в массиве и индекса ячейки с минимальным значением

Минимум = A(1)

ИндексМинимума =1

For i = 1 to N

If A(i) > Максимум Then

Максимум = A(i)

ИндексМаксимума = i

End if

If A(i) < Минимум Then

Минимум = A(i)

ИндексМинимума = i

End if

Next i

5.2.8 Сортировка массива

В примере ниже показан один из методов сортировки одномерного массива A по возрастанию и одномерного массива B - по убыванию. В примере сортируются ячейки массива, индексы которых лежат в диапазоне 1-N. Переменная Обмен предназначена для обмена данных между двумя ячейками. Переменная Обмен должна иметь тот же тип, что и ячейка массива.

For i = 1 to N-1

For j = i+1 to N

If A(i) >A(j) Then

Обмен = A(i)

A(i) = A(j)

A(j) = Обмен

End if

If B(i) <B(j) Then

Обмен = B(i)

B(i) = B(j)

B(j) = Обмен

End if

Next j

Next i

5.2.9 Оператор высвобождения памяти занятой динамическим массивом и обнуления ячеек статического массива (Erase)

Оператор Erase высвобождает память занятую динамическим массивом и обнуляет значение всех ячеек статического массива. Формат вызова оператора:

Erase Имя_Массива

5.3 Записи ( и массивы записей)

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

Объявление типа:

[Private/ Public] Type Имя_пользовательского_типа

Имя_Поля1 [as тип]

Имя_Поля2 [as тип]

.

.

End Type

Пользовательский тип запись является глобальным для всего проекта, если его описание начинается со служебного слова Public или если отсутствуют служебные слова Private и Public в описании данного типа. Запись Public можно объявить только в модуле макросов. В модуле, после объявлением типа записи, можно объявить переменную с соответствующим пользовательским типом. К каждому полю такой переменной можно обратится по следующему правилу:

ИмяПеременой.ИмяПоля

Массив записей объявляется после объявления записи по следующему формату:

Dim ИмяМассива(Размерность) as ИмяЗаписи

Если объявлен массив записей, то происходит обращение с начало к ячейке массива, а затем, к его полю:

ИмяМассива(АдресЯчейки).ИмяПоля

Пример ввода и вывода массива записей вы можете посмотреть в параграфе 7.3.3 Работа с файлом произвольного типа данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]