Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 9. П.9.2. Прог. на VBA.docx
Скачиваний:
24
Добавлен:
09.02.2015
Размер:
4.63 Mб
Скачать

Цикл For ….Next

Алгоритм цикла For….Next приведен на рис. 5.28.

Counter – любая численная переменная VBA, обычно переменная типа Integer или Long.

Start - любое численное выражение и определяет начальное значение для переменной Counter.

End – численное выражение, определяющее конечное значение для переменной Counter.

Statements – один, несколько или ни одного оператора. Эти операторы выполняют тело цикла. VBA выполняет каждый из этих операторов при каждом выполнении цикла.

Ключевое слово Next сообщает VBA о том, что достигнут конец цикла. Не обязательная переменная Counter поcле ключевого слова Next должна быть той же самой переменной Counter, которая была задана после ключевого слова For начале структуры цикла.

Counter=Start

F

Statements

Counter=counter+StepSise

Counter>End

T

Рис.9.28. Алгоритм цикла For….Next

Ключевое слово Next сообщает VBA о том, что достигнут конец цикла. Не обязательная переменная Counter поcле ключевого слова Next должна быть той же самой переменной Counter, которая была задана после ключевого слова For начале структуры цикла.

Синтаксис:

For counter = Start To End [Step StepSize]

Statemends

Next [conter]

При выполнении цикла ForNext VBA поступает следующим образом:

- Присваивает значение, представленное Star, переменной Сounter.

- Выполняет все операторы, представленные с помощью Statements, пока не достигнет ключевого слова Next. Ключевое слово Next показывает VBA на то, что достигнут конец тела цикла.

- Изменяет переменную Сounter на величину StepSize (если включается необязательное слово Step) Если Step не определено, то VBA увеличивает переменную counter на 1.

- Возвращается к началу цикла и сравнивает текущее значение переменной Сounter со значением, представленным End. Если значение Сounter меньше значения End, VBA продолжает выполнение с первого оператора после ключевого слова Next.

9.2.4. Ввод-вывод одномерных и двухмерных массивов

Массив (array) – это коллекция переменных, которые имеют общее имя и базовый тип. Массив является удобным способом хранения нескольких связанных элементов данных в едином контейнере для большего удобства и эффективности программирования. Все элементы данных, сохраняемых в массиве, должны иметь один и тот же тип.

Массив позволяет сохранять и манипулировать многими элементами данных посредством единственной переменной. Кроме уменьшения общего числа различных имен переменных, которые необходимо отслеживать, другим основным преимуществом использования массивов является то, что можно использовать циклы для легкой обработки различных элементов массивов. Объединяя массивы и структуры цикла (обычно For….Next) можно написать небольшое число операторов, которые обрабатывают большой объем данных. Выполнение тех же задач с использованием отдельных переменных может потребовать написания сотен операторов.

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

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

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

Пример одномерного массива приведен в таблице № 9.9.

Таблица № 9.9

11

12

32

45

15

0-й элемент

1-й элемент

2-й элемент

3-й элемент

4-й элемент

В программировании обычно используется нумерация с нулевой базой.

Для доступа к данным, хранящимся в определенном элементе массива, следует указывать имя массива с последующим числом, называемым индексом элемента. Индекс заключают в круглые скобки. Например, если массив в таблице № 1.1 имеет имя DoubleArray, то следующий оператор присваивает число 45 переменной DoubleAny.

DoubleAny = DoubleArray (3)

В этом операторе число 3 является индексом массива. Поскольку нумерация элементов начинается с нуля, элемент, на который ссылается оператор, является, фактически, четвертым элементом массива DoubleArray.

При выполнении оператора DoubleArray, VBA выбирает значение 45 и сохраняет это значение в переменной DoubleArray.

Этот же оператор можно использовать при сохранении данных в массиве:

DoubleArray (5)=12.

При выполнении этого оператора VBA помещает значение 12 в указанных элемент массива, заменяя предыдущее содержимое этого элемента.

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

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

Когда необходимо представить таблицы данных с организацией данных в формате строк и столбцов, для этого используют многомерные массивы.

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

Если в массиве число элементов не меняется, то такой массив называется статическим.

Статические и динамические массивы

Если при выполнении VBA-программы можно изменять число элементов в массиве, то такие массивы называются динамическими. Для изменения размера динамического массива используется оператор ReDim.

VBA сохраняет зарезервированной область памяти для всех элементов в массиве, пока существует переменная типа массива. Подобные массивы называются статическими (static), потому что число элементов в массиве не меняется.

Оператор Option Base

Обычно в VBA используются массивы с нулевой базой. Оператор Option Base позволяет задавать 0 или 1 как начальное число по умолчанию для индексов массива. Если оператор Option Base не используется, VBA начинает нумерацию индексов с 0 (по умолчанию). Необходимо помещать оператор Option Base в область объявлений модуля перед объявлением любых переменных, констант или процедур. Нельзя помещать оператор Option Base внутри процедуры. Можно иметь только один оператор Option Base в модуле.

Синтаксис:

Option Base 0|1

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

Объявление массива с помощью оператора Dim имеет следующий синтаксис.

Синтаксис:

Dim VarName ([Subscripts]) [As Type]

Dim VarName ([lower To] upper, [lower To] upper]….) [As type],

Где:

VarName – любое имя для массива, удовлетворяющее VBA-правилам для имен идентификаторам.

Subscripts – измерение массива.

As Type – тип данных.

Lower – нижняя граница значения индекса.

Upper – верхняя граница значения индекса.

Type – тип данных

Если опустить тип, все элементы массива будут иметь тип Variant. VBA инициализирует элементы числовых массивов нулями и элементы строковых массивов пустыми строками.

Пример.

Dim str_array (1 To 100) As String

Dim variant_array ()

Dim str_Multiplication (0 To 15, 0 To 15) As String

Использование массивов

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

Обращение к элементу массива имеет следующий синтаксис.

Синтаксис.

arrayName (validIndex1, [validIndex2]….)

validIndex – имя массива.

validIndex1 – допустимое значение индекса для первого измерения массива.

validIndex2 – допустимое значение индекса для второго измерения массива.

Необходимо предоставлять значение индекса для каждого измерения массива при каждом обращении к какому-либо элементу массива.

Ввод-вывод одномерных массивов

При вводе одномерного массива необходимо последовательно вводить 1-й, 2-й и т.д. элементы массива, аналогично поступают при выводе. Для ввода или вывода массива необходимо организовать цикл. Наиболее удобно использовать для ввода и вывода одномерного массива алгоритм с использованием безусловного цикла.

Алгоритм ввода вывода одномерного массива приведен на рис.5.29.

Расшифровка процедуры приведена ниже.

Sub Massiv () – название процедуры.

Dim Mas (5) As Integer - объявили одномерный массив с 5-ю элементами, тип чисел – целые.

Dim s As String – объявили рабочую переменную для завершающего вывода данных из массива в диалогом окне. As String – тип данных в переменной для хранения.

For i = 1 To 5 – процедура в первом цикле For….Next, принимает целые числа от 1 до 5 и заносит их в массив.

Mas (i) = InputBox (i) – ввод целого числа для i-го элемента.

Next – переход ко второму циклу (элементы массива заносятся в строку и выводятся на экран в диалоговом окне с помощью оператора MsgBox).

For i = 1 To 5 – элементы в строке с 1 по 5.

s = s & Mas(i) & “ ;” - формирование строки из элементов массива. Массив выводится в одну строку. Элементы массива разделяются символом “ ;”.

MsgBox s – вывод ранее введенного массива.

End Sub – окончание процедуры.

Рис.5.27. Алгоритм ввода-вывода одномерного

Рис. 9.29. Алгоритм и процедура ввода-вывода одномерного массива

Ввод-вывод двухмерного массива

Алгоритм и процедура ввода и вывода двухмерного массива представлен на рис.5.30.

Описание данной процедуры:

Sub Massiv () – название процедуры

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

Dim Mas (5, 5) As Integer - объявили двухмерный массив с 5 столбцами и пятью строками, тип чисел – целые.

Dim s As String – объявили рабочую переменную для завершающего вывода данных из массива в диалогом окне. As String – тип данных в переменной для хранения

Next j

Next i – окончание операции присвоения переменных

Ввод элементов массива в память компьютера:

For i = 1 To 5 – ввод осуществляется с первого элемента первой строки, потом со второго и т.д.

For j = 1 To 5 до конца первой строки, потом с первого элемента второй строки и т.д.

Mas(i,j) = InputBox(i,j) – оператор ввода элементов массива в память ЭВМ

Next j

Next i – окончание действия оператора For….Next

Рис. 9.30. Алгоритм и процедура ввода-вывода двухмерного массива

Алгоритмы упорядочения массива

В качестве примера приведем алгоритм и процедуру сортировки одномерного массива методом «пузырька»

Вывод элементов введенного массива из памяти ЭВМ:

For i = 1 To 5 – вывод осуществляется аналогично вводу

For j = 1 To 5

s = s & Mas (i,j) & “ ; ”

Next j

s = s & Chr (13) – перевод строки (вывод не одной строкой, а несколькими, как в введенном массиве)

Next i – окончание действия оператора For….Next

MsgBox s – вывод ранее введенного массива на диалоговое окно

End Sub – окончание процедуры.