ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 19.06.2025
Просмотров: 1436
Скачиваний: 3
Контрольные вопросы
1.Что такое итерация цикла и тело цикла?
2.Что такое цикл с фиксированным числом итераций?
3.Можно ли изменить количество итераций цикла For…Next?
4.Что такое неопределенный цикл?
5.Какая разница между фиксированными и неопределенными циклами?
6.Как в цикле Do… задать продолжение выполнения, пока условие детерминанта истинно, а как – пока условие детерминанта ложно?
7.Как в цикле Do…задать проверку условия детерминанта до выполнения тела цикла, а как – после выполнения?
Часть 6. МАССИВЫ. ОБЪЕКТЫ VBA ДЛЯ ВВОДА-ВЫВОДА
В этой части описываются массивы. Массив (array) – это коллекция переменных, которые имеют общие имя и базовый тип. Массив является удобным
способом хранения нескольких связанных элементов данных в едином контейнере для большего удобства и эффективности программирования. Все элементы данных, сохраняемых в массиве, должны иметь один и тот же тип.
Массив позволяет сохранять и манипулировать многими элементами данных посредством единственной переменной. Кроме уменьшения общего числа различных имен переменных, которые необходимо отслеживать, другим основным преимуществом использования массивов является то, что можно использовать циклы для легкой обработки различных элементов массивов. Объединяя массивы и структуры цикла (обычно For…Next), можно написать небольшое число операторов, которые обрабатывают большой объем данных.
Выполнение тех же задач с использованием отдельных переменных может потребовать написания сотен операторов.
Лабораторная работа № 6. Массивы. Свойства и методы объектов Range
и Selection
Цель занятия: Знать одномерные и многомерные массивы. Уметь использовать массивы. Знать свойства и уметь использовать методы объектов Range и Selection
Материалы к занятию: MS Excel 2003.
Размерность массива
В языках программирования обычно используются одномерные и многомерные массивы, одни из которых описывают относительно простые, а другие – более сложные объекты.
Наименее сложный массив – это просто список элементов данных; такого рода массив называется простым (simple) или одномерным (single-dimensional)
массивом. Каждый элемент данных, хранимых в массиве, называется элементом (element) массива. Элементы в массиве нумеруются от 0. Такая система
нумерации довольно распространена в программировании и называется нумерацией с нулевой базой (zero-based).
Для доступа к данным, хранящимся в определенном элементе массива,
88
следует указывать имя массива с последующим числом, называемым индексом (subscript или index) элемента. Индекс всегда заключается в круглые скобки. Можно использовать элемент массива в любом выражении VBA – точно так же, как используется значение константы или переменной в каком-либо выражении.
Одномерные массивы обычно используются для представления различных списков данных. Однако часто бывает необходимо представить таблицы данных в программах с организацией данных в формате строк и столбцов, подобно ячейкам в рабочих листах Excel. Для этого необходимо использовать многомерные (multidimensional) массивы. Поскольку вы уже имеете опыт работы с ячейками Excel, то нет необходимости в подробном разъяснении сущности двумерного массива. Адрес каждой ячейки листа состоит из двух чисел (измерений), одно из которых (номер строки) является первым индексом, а второе (номер столбца) – вторым индексом массива. VBA позволяет создавать массивы, имеющие до 60 измерений. Чаще всего в программировании используются одно – и двумерные массивы.
Число элементов в массиве обычно задается во время объявления массива. Объявление массива указывает VBA величину различных измерений массива (диапазон изменения каждого индекса). После того как массив объявлен, VBA выделяет достаточный объем памяти для всех элементов массива. Переменные типа массив подчиняются тем же правилам области действия, что и любые другие переменные.
VBA сохраняет зарезервированной область памяти для всех элементов в массиве, пока существует переменная типа массив. Подобные массивы называются статическими (static), потому что число элементов в массиве не меняется.
Выбор размера массива может быть затруднен, если неизвестно, сколько данных будет введено в массив, или если объем данных, собираемых для массива, значительно меняется. Для подобных ситуаций VBA поддерживает особый тип массивов, называемый динамическим (dynamic) массивом. Динамические массивы получили свое название, потому что можно изменять число элементов в массиве при выполнении VBA-программы. Динамический массив (в сочетании с правильным программированием) может увеличиваться или сжиматься (уменьшаться в размере), чтобы вмещать точно необходимое число элементов без напрасного расходования памяти. Для изменения размера динамического массива используйте оператор ReDim, описываемый далее в этой части.
Оператор Option Base
Обычно в VBA используются массивы с нулевой базой. В системе
нумерации с нулевой базой индекс для первого элемента в любом измерении массива является равным 0; массив с 10 элементами имеет индексы от 0 до 9.
VBA позволяет задавать начальное число для элементов массива. Можно
задавать нижнее число для индексов массива при объявлении массива (описывается далее в этой части), или использовать директиву компилятора Option Base для указания того, должна ли нумерация индексов начинаться с 0 или с 1. Директива компилятора Option Base имеет следующий синтаксис:
Option Base 0 | 1
89
оператор Option Base позволяет задавать 0 или 1 как начальное число по умолчанию для индексов массива. Если оператор Option Base не используется, VBA начинает нумерацию индексов массива с 0 (по умолчанию). Необходимо
помещать оператор Option Base в область объявлений модуля перед объявлениями любых переменных, констант или процедур. Нельзя помещать оператор Option Base внутри процедуры. Можно иметь только один оператор Option Base в модуле. Оператор Option Base влияет на все массивы, объявляемые в модуле, независимо от того, являются ли они локальными в процедуре или объявляются на модульном уровне.
Объявление массивов
Вы уже знакомы с оператором Dim, используемым для объявления переменных. Этот же оператор используется и для объявления массивов. Объявление массива с помощью оператора Dim имеет следующий синтаксис:
Dim VarName([Subscripts]) [As Type]
VarName – любое имя для массива, удовлетворяющее VBA-правилам для имен идентификаторов; Subscripts – измерение (измерения) массива. Можно объявлять массивы, имеющие до 60 измерений. Для одномерного массива включается один Subscripts; для двумерного массива – два (отделенные друг от друга запятой) и так далее; каждый Subscripts добавляет новое измерение в массив.
Можно также объявлять статические и динамические массивы, используя ключевые слова Public, Private и Static – точно так же, как для любой другой переменной и с тем же влиянием на область действия (Public, Private – на уровне модуля, Static – на уровне процедуры).
Оператор Subscripts имеет следующий синтаксис:
[lower То] upper [,[lower To] upper]…
здесь lower определяет нижний диапазон допустимых индексов для массива; upper – верхний предел. Заметьте, что только верхний предел является обязательным; часть lower To оператора Subscripts является необязательной. При определении только предела upper VBA нумерует элементы массива в зависимости от установки Option Base. Если действует установка Option Base l, VBA нумерует элементы в массиве от 1 до upper; иначе – от 0 до upper.
Включение части lower To оператора Subscripts помогает сделать код более легким и понятным, а также выявить ошибки программирования. Это также позволяет определять иной начальный индекс для массива, чем 0 или 1.
Подобно обычным объявлениям переменных можно объявлять определенный тип данных для массива, включая в объявление оператор As type. При этом type представляет любой допустимый тип VBA. Можно также объявлять массивы, имеющие определенный пользователем тип (создание пользовательских типов в учебно-методическом пособии не рассматривается). Если опустить type, все элементы в массиве имеют тип Variant. VBA инициализирует элементы числовых массивов нулями и элементы строковых массивов пустыми строками.
Заметьте, что оператор Subscripts является необязательным. Для создания динамического массива не используйте оператор Subscripts (необходимо
90
включать круглые скобки в объявление массива, независимо от того, определяется ли Subscripts).
При объявлении массивов следует помнить, что включение оператора Subscripts в объявление массива создает статический массив с фиксированным числом элементов, пропуск оператора Subscripts в объявлении массива создает динамический массив, а установка Option Base может повлиять на общее число элементов в массиве.
Использование массивов
После объявления массива использовать его в коде VBA довольно просто. Как уже объяснялось в начале этой части, для доступа к элементу массива необходимо указать имя массива, за которым следует значение индекса, заключенное в круглые скобки. Обращение к элементу массива имеет следующий синтаксис:
arrayName(validIndex1, [validlndex2]…)
здесь arrayName – имя массива; validlndexl – допустимое значение индекса для первого измерения массива; validlndex2 – допустимое значение индекса для второго измерения массива, если таковое имеется. Необходимо предоставлять
значение индекса для каждого измерения массива при каждом обращении к какому-либо элементу в массиве. Допустимым индексом является любая переменная VBA или выражение, имеющее результатом целое число в диапазоне объявленных измерений массива.
Задание 1. Напишите процедуру работы с одномерным массивом, которая принимает в диалоговом окне целые числа (для простоты без всякой проверки), заносит их в элементы массива. Затем значения элементов массива заносятся в строку и выводятся на экран в диалоговом окне оператора MsgBox.
Для этого:
ü введите процедуру (листинг 17):
Листинг 17 – Работа со статическим одномерным массивом
1Sub List6_17 ()
2Dim Int_Array(1 To 5) As Integer
3Dim str_msg As String
4Dim i As Integer
5
6str_msg = ""
7For i = 1 To 5
8Int_Array(i) = InputBox("Введите целое число для " _
9 |
& i & "-го элемента массива", "Ввод элементов массива") |
10Next
11For i = 1 To 5
12str_msg = str_msg & Format(Int_Array(i), "@@@@@")
13Next
14
91