- •Программирование на языке vba Учебное пособие
- •Глава 1. Программы и их реализация. Введение в vba
- •Подготовка задач к решению на эвм
- •А а Блок ввода – вывода
- •1.3. Языки программирования и их реализация
- •1.4. Основы возникновения и использования языка vba
- •Глава 2. Основные принципы работы с vba
- •2.1. Алфавит vba
- •Разработка пользовательской формы и элементов управления
- •Процедуры Sub
- •2.1.1. Данные
- •Константы
- •2.1.2. Знаки операций
- •2.2. Основные операторы языка
- •2.2.1. Оператор описания переменных
- •2.2.2. Оператор присваивания
- •2.2.3. Операторы ввода данных
- •InputBox(“Сообщение”).
- •2.2.4. Операторы вывода данных
- •MsgBox (Список аргументов)
- •2.3. Линейные процессы
- •Программный код
- •2.4.1. Оператор условного перехода
- •If Условие Then Оператор 1 Else Оператор 2
- •2.4.2. Оператор выбора Select Case
- •2.5. Циклические процессы
- •2.5.1. Оператор цикла с параметром For – Next
- •2.5.2. Оператор цикла While – Wend
- •2.5.3. Оператор цикла Do – Loop
- •2.6. Работа с массивами
- •2.6.1. Вычисления в одномерных массивах
- •Пример: a(I), b(j).
- •Объявление массива
- •Ввод массива
- •Вывод массива
- •Вычисление суммы, произведения и количества элементов в одномерном массиве
- •Вычисление минимального и максимального элементов в одномерных массивах
- •Сортировка элементов одномерного массива методом “пузырька”
- •Удаление одного элемента из одномерного массива
- •Удаление из массива группы элементов
- •Вставка одного элемента в массив
- •Вставка группы элементов в массив
- •2.6.2. Вычисления в двумерных массивах
- •Ввод двумерного массива
- •Вывод двумерного массива
- •Формирование матрицы
- •Вычисление суммы, произведения, количества, минимума и максимума в двумерных массивах
- •Построчное вычисление в матрице
- •2.7. Пользовательский тип данных и формы пользователя
- •2.7.1. Пользовательский тип данных
- •Значение Оператор присоединения
- •2.7.2. Формы пользователя
- •Список использованной литературы
- •Оглавление
- •Глава 1. Программы и их реализация. Введение в vba. ………...3
- •Глава 2. Основные принципы работы с vba…………………...…16
Вставка группы элементов в массив
Рассмотрим пример.
В одномерный массив перед каждым числом 0 вставить сумму всех элементов массива. Фрагмент программы, в котором происходит вставка элементов, выглядит следующим образом:
i = 1
While i <= n
If x(i) = 0 Then
For j = n + 1 To i + 1 Step –1
x(j) = x(j – 1)
Next j
x(i) = s
n = n + 1
i = i + 2
Else
i = i + 1
End If
Wend
2.6.2. Вычисления в двумерных массивах
Одномерные массивы представляют простые списки данных. Однако часто бывает необходимо представить таблицы данных в формате строк и столбцов. В VBA можно также создавать массивы, имеющие более трех измерений; фактически, VBA позволяет создавать массивы, имеющие до 60 измерений. Чаще в программировании используются одно- и двумерные массивы.
Двумерные массивы представляют набор однотипных элементов, расположенных в несколько строк и столбцов. Каждый элемент двумерного массива обозначается при помощи имени и индексов, заключенных в круглые скобки, например, A(i, j), X(4, 3), P(2i, j+1), первый индекс – номер строки, второй – номер столбца.
Двумерный массив, называемый также матрицей, описывается при помощи оператора Dim.
Dim A(10, 10) As Тип ‘ нумерация с нуля
Dim A(1 To 10, 1 To 10) As Тип ‘ нумерация с единицы
Матрица, у которой количество строк равно количеству столбцов, называется квадратной матрицей.
В VBA имеется возможность переопределять размерность массивов, а во время объявления не указывать размерность. Для этого используют динамический массив, который задают с помощью оператора Dim, затем его размер устанавливают с помощью оператора ReDim во время выполнения процедуры.
Пример.
Dim B( ) As String ‘объявляет динамический массив
ReDim B(1 To 30) ‘изменяет размер массива до 30 элементов
Ввод двумерного массива
Рассмотрим два способа ввода массива.
Считывание массива с рабочего листа Excel.
For i = 1 To N
For j = 1 To M
A(i, j) = Cells(i, j)
Next j
Next i
Где N – количество строк массива, M – количество столбцов массива.
Формирование массива на рабочем листе Excel при помощи счетчика случайных чисел, а затем считывание массива с рабочего листа.
Randomize
For i = 1 To N
For j = 1 To M
Cells(i, j) = Int(Rnd * 100 – 50)
A(i, j) = Cells(i, j)
Next j
Next i
Вывод двумерного массива
Вывод двумерного массива на рабочий лист Excel выглядит следующим образом:
For i = 1 To N
For j = 1 To M
Cells(i, j) = A(i, j)
Next j
Next i
Формирование матрицы
При формировании квадратной матрицы будем пользоваться следующими инструкциями. Общий вид квадратной матрицы, например размерности 44, выглядит следующим образом:
А11 |
А12 |
А13 |
А14 |
А21 |
А22 |
А23 |
А24 |
А31 |
А32 |
А33 |
А34 |
А41 |
А42 |
А43 |
А44 |
В квадратной матрице выделяются главная и побочная диагонали. Условия нахождения элемента на главной или побочной диагонали показаны на рис. 10.
Относительно каждой диагонали элемент матрицы может находиться выше или ниже диагонали. Условия нахождения элемента в каждой из частей матрицы показаны на рис. 11.
I, J – номера строки и столбца, в которых находится элемент матрицы.
Побочная
диагональ, I
+ J
= N
+ 1
Главная
диагональ, I
= J
Рис. 10. Главная и побочная диагонали
I
= J
I+J
= N+1
Рис. 11. Условия нахождения элемента выше или ниже диагонали
Относительно обеих диагоналей элемент матрицы может находиться в одной из четвертей. Условия нахождения элемента в каждой из них показаны на рис. 12.
(I>J)
and (I+J>N+1)
Рис. 12. Нахождение элемента в одной из четвертей
Пример 19.
Сформировать матрицу X(N, N) вида
4 |
0 |
0 |
0 |
5 |
1 |
4 |
0 |
5 |
2 |
1 |
1 |
4 |
2 |
2 |
1 |
5 |
3 |
4 |
2 |
5 |
3 |
3 |
3 |
4 |
На побочной диагонали матрицы стоят 5, на главной диагонали стоят 4, в I четверти – 0, во II четверти – 2, в III четверти – 3, в IV четверти – 1.
Программный код
Option Explicit
Sub PR19 ( )
Dim a(10, 10) As Integer
Dim N, i , j As Integer
N = Val(InputBox("Введите N"))
Range(Cells(1, 1), Cells(100, 100)).Select ‘ выделяет диапазон ячеек
Selection.Clear ‘ очищает выделенный диапазон ячеек
Cells(1, 1).Select ‘ снимает выделение
For i = 1 To N
For j = 1 To N
If i + j = N + 1 Then a(i, j) = 5
If i = j Then a(i, j) = 4
If i < j And i + j < N + 1 Then a(i, j) = 0
If i < j And i + j > N + 1 Then a(i, j) = 2
If i > j And i + j > N + 1 Then a(i, j) = 3
If i > j And i + j < N + 1 Then a(i, j) = 1
Next j
Next i
Cells(1, 1) = "Полученная матрица"
For i = 1 To N
For j = 1 To N
Cells(i + 1, j) = a(i, j)
Next j
Next i
End Sub