- •Лабораторна робота 1 Ієрархічна структура об'єктів vba. Властивості і методи
- •Продовження табл. 2
- •Закінчення табл. 2
- •Лабораторна робота 2 Організація програм у vba. Редактор Visual Basic
- •Лабораторна робота 3 Типи змінних. Тип даних, обумовлений користувачем. Змінна типу Оbject. Константи.
- •Лабораторна робота 4 Область дії змінної. Персистенція
- •Лабораторна робота 5 Оператори мови vba
- •Лабораторна робота 6 Масиви. Опис і створення масивів. Динамічні масиви
- •Лабораторна робота 7 Масив і діапазон робочого листа. Функції для роботи з масивами
- •Лабораторна робота 8 Убудовані функції vba. Функції користувача
- •Процедура повинна:
- •Лабораторна робота 9 Використання If і Select Case у функціях користувача
- •Лабораторна робота 10 Форма користувача
- •Лабораторна робота 11 Елементи керування
- •Лабораторна робота 12 Робота зі списками
- •Лабораторна робота 13 Розв’язання рівнянь методом послідовних наближень
- •Лабораторна робота 14 Використання методу ChartWizard і вбудованих математичних функцій для виконання фінансових розрахунків
- •Задачі для самостійного розв’язання
- •Список рекомендованої літератури Основна
- •Додаткова
Лабораторна робота 6 Масиви. Опис і створення масивів. Динамічні масиви
Масив – це індексована група значень, узагалі говорячи, того самого типу. Синтаксис опису масиву:
dim <ім'я масиву> [(розмірність)] [as <тип елементів>]
Якщо тип елементів масиву не зазначений, то за замовчуванням вони мають тип Variant.
<розмірність> допускає до 60 елементів і має синтаксис:
[min1 to] max1, [min2 to] max2, …
Якщо min явно не зазначений, то індексація починається з 0.
Приклад:
dim a(5) as double ‘ масив 6 елементів.
dim b(2,3) as string ‘масив 3-x рядків і 4-х стовпців.
Якщо необхідна індексація з 1, то на початку програми використовується опція Option Base 1 або використовується другий спосіб опису масивів, наприклад:
dim a (1 to 5) as double
dim b (1 to 2, 1 to 3) as string
Приклад 1
option base 1
sub proc1()
dim a(3) as integer
a(1) =10
a(2) =20
a(3) =30
msgbox “a(1)=”&a(1)
end sub
Значення змінної можна подивитися не тільки за допомогою функції Msgbox, але й через вікно налагодження Immediate. Для цього перед end sub у програму додамо команду debug.print <список змінних> , наприклад:
debug.print “a(2)=”,a(2), “a(3)=”,a(3)
У VBA існує унікальна можливість обійти визначення масиву як набору однотипних елементів. Для цього потрібно визначити масив як Variant.
Приклад 2
Створимо масив елементів різних типів.
Option Base 1
Sub pr2()
dim b(4,3) as variant
b(1,1) = “VBA”
b(1,2) = “C++”
b(1,3) = “Математичні моделі”
b(2,1) = 4
b(2,2) = 5
b(2,3) = 6.5
b(3,1) = #01/01/82#
b(3,2) = #05/07/93#
b(3,3) = #01/01/99#
b(4,1) = FALSE
b(4,2) = TRUE
b(4,3) = FALSE
debug.print “b(4,2)=”,b(4,2)
msgbox “b(1,3)=” & b(1,3)
end sub
Динамічні масиви використовуються, якщо в процесі роботи програми потрібно змінити розмірність масиву.
Синтаксис:
dim <ім'я масиву> () as <тип елементів>
При цьому в програмі обов'язково повинна бути інструкція, що визначає розміри масиву, до його першого використання.
redim <ім'я масиву> (<розмірність>) as <тип>
При цьому перевизначати можна тільки розмірність, але не тип масиву.
Приклад 3
dim c() as variant
redim c(2)
c(1)=5 : c(2)=6
debug.print c(1), c(2)
redim c(3,2)
c(1,1) = “краще”
c(1,2) = “менше”
c(2,1) = “,”
c(2,2) = “так”
c(3,1) = “краще”
c(3,2) = “.”
debug.print c(1,1), c(1,2), c(2,1)
debug.print c(2,2), c(3,1), c(3,2)
Передати значення елементів одного масиву іншому масиву можна тільки поелементно.
Завдання до лабораторної роботи 6
Створити 2 масиви:
1) елементів типу, визначеного користувачем;
2) елементів різних типів.
Ініціювати елементи масиву й вивести їх значення на екран двома способами (використовуючи msgbox і вікно налагодження).
Лабораторна робота 7 Масив і діапазон робочого листа. Функції для роботи з масивами
1. Масив можна вивести в діапазон робочого листа без циклу по всіх елементах масиву, привласнивши властивості Value діапазону ім'я масиву:
Range (<діапазон>). Value =<ім'я масиву>
2. Дані з діапазону легко перенести в масив VBA, привласнивши масиву значення властивості Value зазначеного діапазону:
<ім'я масиву> = Range (<діапазон>). Value.
При цьому масив повинен бути описаний як змінна типу Variant.
3. Функції VBA для роботи з масивами
Lbound (<ім'я масиву>[,<розмірність>])
Ubound (<ім'я масиву>[,<розмірність>])
Ці функції повертають відповідно мінімальне й максимальне припустимі значення зазначеної розмірності масиву, наприклад:
Dim A(1 to 100, 0 to 3, -3 to 4)
x=Lbound(A, 1) ``x=1
y=Ubound(A, 2) ``y=3
z =Lbound(A, 3) ``z=-3
Erase <ім'я масиву>[, <ім'я масиву>, …]
- для статичних масивів очищає всі елементи масиву: для чисел – заносить нулі, для рядків – порожній рядок, для variant – значення empty
- для динамічних масивів цілком видаляє масив і його зміст з оперативної пам'яті. Перед наступним звертанням програми до динамічного масиву необхідно використовувати Redim.
Array (<список аргументів>)
Створює масив типу Variant, привласнюючи список аргументів елементам масиву, наприклад:
Dim b as Variant
B= Array(10, 20, 30) 'b(0)=10, b(1)=20, b(2)=30.
На робочий лист масив array завжди виводиться в рядок і якщо треба вивести його в стовпець, його потрібно транспонувати, наприклад:
Range (“C10:C12”). Value =Application.Transpose (b)
Якщо масив array передати в діапазон робочого листа, а потім повернути його в інший масив, тобто привласнити змінній Variant, то звертатися до елементів нового масиву потрібно, як до двовимірного масиву, у якого один рядок і кілька стовпців, наприклад:
Dim b as Variant
Nums =array (10, 11, 12, 13, 14 )
Debug.print nums(4)
Range (“a1:e1”). Value =nums
B =Range(a1:e1”). Value
Debug.print b (1, 4) `елементи nums(4) і b(1, 4) однакові.
Array можна використовувати й для заповнення багатомірних масивів.
IsArray (<ім'я змінної>)
Повертає True, якщо ім'я змінної містить масив, False – у противному випадку.
Функції робочого листа Excel для роботи з масивами.
Count (<ім'я масиву>) – повертає кількість чисел у масиві
Count A (<ім'я масиву>) – повертає кількість елементів масиву
Sum (<ім'я масиву>) - суму елементів масиву
SumProduct (<ім'я масиву1>, <ім'я масиву2>, …) – суму добутків елементів масивів
SumSq (<ім'я масиву>) – повертає суму квадратів елементів масиву
SumXm2(<ім'я масиву1>, <ім'я масиву2>) – повертає суму квадратів різниць елементів двох масивів
Sum2Y2(<ім'я масиву1>, <ім'я масиву2>) – повертає суму різниць квадратів елементів двох масивов
Mmult (<ім'я масиву1>, <ім'я масиву2>) – повертає добуток двох матриць
Minverse (<ім'я масиву>) – повертає зворотну матрицю
Transpose (<ім'я масиву>) – повертає транспоновану матрицю
Mdeterm (<ім'я масиву>) – повертає визначник матриці
При цьому до всіх убудованих функцій робочого листа Excel звертатися необхідно, указуючи сам host-додаток, наприклад:
A =Application. Minverse (B).
Приклад 1
Option Base 1
Sub pr1( )
Dim a(5,5) as Integer, x as Integer, y as Integer, b as Variant
For x=1 to 5
For y=1 to 5
A (x, y)=x*y
Next y
Next x 'створення масиву
Worksheets (1). Activate
With Range (“A1:E5”). Value =a
Msgbox “масив уведений у діапазон” & .Address
End With
'передаємо масив діапазону робочого листа, можемо переглянути зміст 'робочого листа й одержати повідомлення про те, що масив уведений у діапазон з 'абсолютними координатами $A$1:$E$5.
B= Range (“A1:E5”).Value
MSgbox b (3,4)
Msgbox “діапазон уведений у масив” & Ubound (b, 1) & _
“на” & Ubound(b, 2).
'діапазон уведений у масив 3x4
With Range (“F3:H7”) Value =a
Msgbox “частина масиву а, уведена в діапазон” &.Address
End With
'у діапазон робочого листа можна ввести
`частину масиву, створений діапазон 3x5
End Sub.
Завдання до лабораторної роботи 7
1. Задати три масиви: за допомогою функції Array, Z поелементно в циклі.
Обчислити:
визначник для масиву Z;
суму добутків масивів X і Y ;
транспонований масив Y;
добуток матриць X і Z;
зворотну матрицю для масиву Z і перевірити отриманий результат множенням (Z*Z-1=E).
Усі результати вивести на робочий лист із заголовками:
“масив x”, “масив y”, “масив z”, “добуток x і z” і т.д.
2. Використовуючи вбудовані функції, обчислити значення виразу (табл. 12).
Таблиця 12
№ |
Вираз |
1 |
2 |
1 |
де x, y – вектори з n компонентами, b – матриця розмірності m×m, причому n=4, m=2, x=(3, 1, 2, 3), y=(1, 7, 2, 3), |
2 |
де a – вектор з m компонентів, c – матриця розмірності n×n, причому n=3, m=4, а=(3, 1, 2, 3), |
Продовження табл. 12
1 |
2 |
3 |
де x, y – вектори з n компонентів, b – матриця розмірності m×m, причому n=4, m=2, x=(1, 2, 7, 4), y=(1, 7, 2, 3), |
4 |
де a – вектор з m компонентів, c – матриця розмірності n×n, причому n=3, m=4, а=(3, 1, 2, 3), |
5 |
де x, y – вектори з n компонентів, b – матриця розмірності m×m, причому n=4, m=2, x=(1, 2, 7, 4), y=(1, 7, 2, 3), |
6 |
де a – вектор з m компонентів, c – матриця розмірності n×n, причому n=3, m=4, а=(3, 3, 1, 3), |
Закінчення табл. 12
1 |
2 |
7 |
де x, y – вектори з n компонентів, причому n=4, x=(1, 2, 7, 4), y=(1, 7, 2, 3) |
8 |
де a – вектор з m компонентів, c – матриця розмірності n×n, причому n=2, m=4, а=(1, 4, 1, 3), |
9 |
де x, y – вектори з n компонентів, причому n=4, x=(7, 5, 7, 4), y=(2, 4, 2, 3) |
10 |
де a – вектор з m компонентів, c – матриця розмірності n×n, причому n=3, m=4, а=(2, 1, 1, 3), |