
- •Кафедра інформаційних технологій проектування
- •Запис, редагування та застосовування простого макросу
- •Інтегроване середовище розробки vb-програм – Редактор Visual Basic. Інтерфейс редактора vba
- •Вікно проекта
- •Вбудовані діалогові вікна
- •Процедура Msgbox. Виведення інформації
- •Функція InputBox. Введення інформації
- •Перенос рядка
- •Коментарі
- •Розміщення декількох операторів в одному рядку
- •Лекція №2
- •Що таке об’єкт?
- •Сімейство об’єктів
- •Властивості
- •Найважливіші об’єкти vba Об’єктна модель
- •Об’єкт Application (додаток)
- •Об’єкт Worksheet (Робочий лист)
- •Основні властивості робочих листів
- •Об’єкт Range (діапазон)
- •Оператор With - End With
- •Лекція №3
- •Що таке алгоритм?
- •Виконавець алгоритму — це деяка абстрактна чи реальна (технічна, біологічна чи біотехнічна) система, здатна виконати дії, що наказуються алгоритмом.
- •Якими властивостями володіють алгоритми?
- •У якій формі записуються алгоритми?
- •Базова алгоритмічна структура
- •Етапи рішення задач за допомогою комп'ютера
- •Використання імен
- •Типи даних
- •Константи
- •Операції vba
- •Вирази. Пріоритети (старшинство) операцій
- •Оператор присвоєння
- •Блок-схема алгоритму:
- •Лекція №6.
- •Форма. Елементи управління
- •Узгодження про імена
- •Арифметичні цикли. Оператор циклу For – Next
- •Лекція №8.
- •Список рекомендованої літератури:
Лекція №8.
Тема: Програмування на мові VBA. Масиви. Розмірність масиву. Одновимірні масиви. Статичні і динамічні масиви. Об’явлення масивів. Використання масивів. Використання ReDim для динамічних масивів.
Масиви
Масивом називається впорядкована послідовність однотипних елементів, кожний з яких має свій порядковий номер, який називається індексом. Елементи масиву розміщаються в послідовних комірках пам’яті. Щоб звернутись до елементу масиву, треба вказати ім’я масиву та індекс елементу масиву. Масиви бувають статичні, динамічні, одновимірні та багатовимірні.
Одновимірний масив – індексована послідовність елементів одного типу, що мають один індекс. Одновимірний масив представляється як вектор. Розмірність масиву – це кількість елементів у масиві. Ім’я масиву позначається ідентифікатором.
Запис одновимірного
масиву:
Наприклад: запис одновимірного масиву A(n), що складається з п’яти елементів, тобто має розмірність n= 5
У
цьому масиві
,
і так далі, де i=1,2,3,4,5
- індекси (порядкові номери) елементів
у масиві
Статичні масиви - це масиви, які мають постійний або фіксований розмір, який відомий перед виконанням програми
Синтаксис оголошення статичного масиву:
Dim <Ім’яЗмінної>(<індекси>) [As <Тип>] [,<Ім’яЗмінної>(<індекси>) [As Тип>]] …
<індекси> - вказують на розмір масива, можна описувати до 60 індексів
Синтаксис цього параметру [<нижній> to]<верхній>]
Якщо нижній індекс не задано явно, то нижня границя масиву задається інструкцією Option Base на початку модуля в секції General Declarations, якщо ж і вона відсутня, нижня границя масиву дорівнює 0
Наприклад:
Dim A(12) As Integer – оголошує одновимірний масив цілих чисел. Розмір – 12 елементів. Причому за замовчуванням перший елемент масиву – А(0), а останній – А(11). В цьому випадку говорять, що 0 – базовий індекс. Його можна змінити, написавши інструкцію Оption Base 1 на початку модуля в секції. General Declarations Тоді першим елементом масиву буде А(1), а останнім А(12)
Останнє оголошення можна записати так
Dim A(1 to 12) As Integer
Динамічні масиви
Іноді в процесі виконання програми необхідно змінити розмір масиву. В цьому випадку масив оголошують як динамічний. При цьому не треба вказувати розмір.
Наприклад
Dim R() As Single
Потім в програмі необхідно обчислити необхідний розмір масиву в деякій змінній, наприклад, n і змінити розмір динамічного масиву за допомогою інструкції ReDim.
Синтаксис:
ReDim<Ім’яЗмінної>(<індекси>)[As <Тип>][,<Ім’яЗмінної>(<індекси>)[As Тип>]] …
Нариклад,
ReDim R(1 to n) встановлюються межі динамічного масиву від 1 до n. Якщо, наприклад, n=10, то встановлюються межі динамічного масиву від 1 до 10.
Для вирішення задачі по роботі з масивом потрібно виконати наступне:
масив треба оголосити, як динамічний, тобто описати масив з завданням типу елементів динамічного масиву оператором Dim без вказання розміру
обчислити (увести )необхідний розмір масиву в деякій змінній, наприклад, n
змінити розмір динамічного масиву за допомогою оператора ReDim
здійснити введення \ виведення елементів масиву
обчислити масив
вивести результати обчислень.
Уведення елементів одновимірного масиву у програму можна здійснити за допомогою одного з наведених способів:
1. Уведення елементів одновимірного масиву за допомогою функції InputBox:
For i = 1 To n
a(i) = Val(InputBox(“Уведіть елемент масиву А”)
Cells(2, i) = a(i) ‘Виведення елементів масиву на робочий лист
Next i
2. Уведення елементів одновимірного масиву за допомогою генератора випадкових чисел Randomize та функції Rnd() :
Randomize
For i = 1 To n
b(i) = Rnd() * 10 ‘ Уведення додатних елементів масиву
b(i) = (-1) ^ Int(Rnd() * 10) * (Rnd() * 10) ‘Уведення від’ємних елементів масиву
Cells(5, i) = b(i) ‘ Виведення елементів масиву на робочий лист
Next i
‘Range(Cells(5, 1), Cells(5, n)) = b ‘Виведення елементів масиву на робочий лист у діапазон (другий спосіб)
Уведення елементів одновимірного масиву за допомогою зчитування елементів з комірок робочого листа.
Для цього потрібно попередньо записати елементи у комірки на робочому листі.
For i = 1 To n
a(i)= Worksheets(“Лист1”).Cells(3, i) ‘Зчитування елементів з Лист1, записаних у 3-му рядку, починаючи з стовпця А
Next i
Приклад.
Знайти суму елементів одномірного масиву, уведених з робочого листа Excel.
Private Sub sum_mas()
Dim a(), n as Integer
n = InputBox(“Введіть кількість елементів масиву”)
ReDim a(n)
For i = 1 To n
a(i) = Worksheets(“Лист1”).Cells(2, i)
Next i
s = 0
For i = 1 To n
s = s + a(i)
Next i
MsgBox Str(s)
End Sub
Приклад розв’язання задачі на одновимірні масиви
Умова задачі: Заданий масив А(n). Обчислити значення змінної D за формулою:
В
ирішення:
У
задачі
потрібно знайти суму елементів масиву
А,
що має розмірність n
та розділити цю суму на обчислене
значення мінімального елементу масиву.
Контрольний приклад: Задамо n =5 і масив А =( 4; -6; 1,3; 2,5; -1). Тоді:
D= (4+(-6)+1,3+2,5+(-1)) / (-6)= 0,8
Б
лок-схема
алгоритму:
так
ні
Лекція №9.
Тема: Програмування на мові VBA. Двовимірні масиви. Статичні і динамічні масиви. Об’явлення масивів. Використання масивів. Використання ReDim для динамічних масивів.
Двовимірний масив – індексована послідовність елементів одного типу. що мають два індекси. Двовимірний масив представляється у вигляді матриці.
Запис двовимірного
масиву:
,
аналогічний запис
,
де
ідентифікатор масиву; i,
j
–індекси (номер рядка та стовпця)
елементів у масиві; n,
m-
розмірність
масиву
– кількість рядків та стовпців у матриці.
Якщо n=m,
то матриця вважається квадратною.
У загальному вигляді квадратна матриця А, що має розмірність n=m=3 буде виглядати так:
Статичні масиви - це масиви, які мають постійний або фіксований розмір, який відомий перед виконанням програми
Синтаксис оголошення статичного масиву:
Dim <Ім’яЗмінної>(<індекси>) [As <Тип>] [,<Ім’яЗмінної>(<індекси>) [As Тип>]] …
<індекси> - вказують на розмір масива, можна описувати до 60 індексів
Синтаксис цього параметру [<нижній> to]<верхній>[,[<нижній> to]<верхній>]
Якщо нижній індекс не задано явно, то нижня границя масиву задається інструкцією Option Base на початку модуля в секції General Declarations, якщо ж і вона відсутня, нижня границя масиву дорівнює 0
Щоб оголосити
двовимірний масив (матрицю) розміру 3
на 2 дійсних чисел
треба записати
команди
Оption Base 1
Dim B(3, 2) As Single
або
Dim B(1 to 3, 1 to 2) As Single
Динамічні масиви
Іноді в процесі виконання програми необхідно змінити розмір масиву. В цьому випадку масив оголошують як динамічний і не треба вказувати його розмір.
Наприклад
Dim А() As Single
Потім в програмі необхідно обчислити необхідний розмір масиву в двох змінних, наприклад, n та m і змінити розмір динамічного масиву за допомогою оператора ReDim.
Синтаксис:
ReDim<Ім’яЗмінної>(<індекси>)[As <Тип>][,<Ім’яЗмінної>(<індекси>)[As Тип>]] …
Приклад 1
ReDim А(1 to n, 1 to m) встановлюються межі динамічного масиву від n до m (по кількості рядків та стовпців).
Приклад 2.
Dim B() As Single
N = 2
M = 2
ReDim B(1 to N, 1 to M)
В цьому прикладі показано використання інструкції ReDim.
Для вирішення задачі по роботі з масивом потрібно виконати наступне:
масив треба оголосити, як динамічний, тобто описати масив з завданням типу елементів динамічного масиву оператором Dim
обчислити (увести )необхідний розмір масиву у двох змінних, наприклад, n та m
змінити розмір динамічного масиву за допомогою оператора ReDim
здійснити введення \ виведення елементів масиву
обчислити масив
вивести результати обчислень.
У задачах на двовимірні масиви використовуються вкладені цикли (арифметичні)- внутрішній та зовнішній, керовані по двом індексам.
Уведення елементів двовимірного масиву у програму можна здійснити за допомогою одного з наведених способів:
1. Уведення елементів двовимірного масиву за допомогою функції InputBox:
For i = 1 To n
For j = 1 To m
a(i,j) = Val(InputBox(“Уведіть елемент масиву А”)
Next j
Next i
Range(Cells(1, 1), Cells(n, m)) = a ‘Виведення елементів масиву на робочий лист у діапазон
2. Уведення елементів одновимірного масиву за допомогою генератора випадкових чисел Randomize та функції Rnd() :
Randomize
For i = 1 To n
For j = 1 To m
b(i,j) = Rnd() * 10 ‘ Уведення додатніх елементів масиву
‘b(i,j) = (-1) ^ Int(Rnd() * 10) * (Rnd() * 10) ‘Уведення додатніх та від’ємних елементів масиву
Next j
Next i
Range(Cells(1, 1), Cells(n, m)) = b ‘Виведення елементів масиву на робочий лист у діапазон
Приклад розв’язання задачі на двовимірні масиви
Умова задачі: Задана матриця M(k, p). Побудувати вектор (одновимірний масив ) SM, кожний елемент якого дорівнює сумі елементів кожного стовпця матриці M, розділеній на значення максимального елементу цього стовпця.
Контрольний приклад: Задамо: k =4; р=5 та матрицю М
Знайдемо елементи вектора SM:
(4+(-8)+5+2,4)
/ 5=
3,4
/ 5 = 0,68
(7+1+(-9)+3)
/ 7= 2
/ 7 = 0,2857
(2+3,5+4+0,7)
/ 4 = 10,2
/ 4 = 2,55
(6+3+(-6)+5)
/ 6 = 8
/ 6 = 1,3333
(7,3+(-5)+8+1)
/ 8 = 11,3
/ 8 = 1,4125
Таким чином, вектор SM = (0,68; 0,2857; 2,55; 1,3333; 1,4125)
Блок-схема алгоритму:
max = m(i,j)
ні
так