- •Лабораторна робота 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 і вбудованих математичних функцій для виконання фінансових розрахунків
- •Задачі для самостійного розв’язання
- •Список рекомендованої літератури Основна
- •Додаткова
Лабораторна робота 8 Убудовані функції vba. Функції користувача
Розглянемо деякі вбудовані функції VBA: математичні (табл.13), перевірки типів (табл.15), визначення типу змінної (табл.14), обробки рядків (табл.16), дати і часу (табл.17).
Таблиця 13
Функція |
Значення, що повертається |
1 |
2 |
Abs (arg) |
Абсолютна величина числа |
Atn (arg) |
Арктангенс |
Cos (arg) |
Косинус |
Exp (arg) |
Експонента |
Log (arg) |
Натуральний логарифм |
Закінчення табл. 13
1 |
2 |
Rnd (arg) |
Випадкове число з інтервалу [0;1]. Якщо аrg<0, то Rnd повертає одне й те ж число. Якщо arg>0 чи не зазначений, то повертає наступне випадкове число в послідовності. Якщо arg=0, то повертає випадкове число, отримане при попередньому виклику цієї функції. Перед викликом використовується оператор Randomize |
Sgn (arg) |
Знак числа |
Sin (arg) |
Синус |
Sqr (arg) |
Квадратний корінь з аргументу |
Tan (arg) |
Тангенс |
Fix (arg) Int (arg) |
Обидві функції відкидають дробову частину числа і повертають ціле значення. Відмінність: для негативного аргументу Int повертає найближче ціле менше або таке,яке дорівнює аргументу, Fix повертає найближче ціле більше або таке,яке дорівнює аргументу |
Таблиця14
Функція |
Опис |
||
TypeName(<varname>) |
Повертає строкий вираз, що є ім'ям типу змінної, крім типу, визначеного користувачем |
||
VarType(<varname>) |
Повертає константу, що відповідає типу змінної Значення, що повертаються:
36 чи vbUserDefinedType (тип, визначений користувачем) 8192 чи vbArray Наприклад: Dim B(2) as Integer VarType(B) ‘ видасть 8194 (8192+2) |
Таблиця15
Функція |
Опис |
1 |
2 |
IsArray (varname) |
Чи є змінна varname масивом |
IsDate (varname) |
Чи є змінна датою |
IsEmpty (varname) |
Чи була змінна оголошена |
Закінчення табл. 15
1 |
2 |
IsError (varname) |
Чи є змінна кодом помилки |
IsNull (varname) |
Чи є змінна порожнім значенням (Null) |
IsNumeric (varname) |
Чи є змінна числовим значенням |
IsObject (varname) |
Чи є змінна об'єктом |
Таблиця 16
Функція |
Опис |
Asc |
Повертає код рядка |
Chr |
Перетворить код у рядок |
LCase UCase |
Перетворить рядок до нижнього чи верхнього регістра відповідно |
Len |
Повертає кількість символів у рядку |
Left (String, Length) |
Повертає перші n символів рядка |
Right(String, Length) |
Повертає останні n символів рядка |
Mid (String, start [,length]) |
Повертає n символів рядка, починаючи з зазначеної позиції |
LTrim RTrim Trim |
Повертає копію рядка без пробілів у її початку, кінці й без пробілів у її початку й кінці відповідно |
Space (number) |
Повертає рядок з n пробілів |
String (n,s) |
Повертає рядок з n символів s |
Strcomp |
Повертає результат порівняння двох рядків Значення: -1 – якщо перший рядок менший другого 0 – якщо рядки рівні 1 – якщо перший рядок більший другий |
StrReverse |
Повертає рядок у зворотному порядку |
Replace |
Знаходить і заміняє в рядку одне підстроювання іншим |
Таблиця 17
Функція |
Опис |
Date |
Повертає значення типу Variant, що містить поточну системну дату |
Time |
Повертає значення типу Variant, що містить поточний системний час |
Now |
Повертає значення типу Variant, що містить поточну дату й час |
Hour |
Повертає години |
Minute |
Повертає хвилини |
Second |
Повертає секунди |
Day |
Повертає день |
Month |
Повертає місяць |
Year |
Повертає рік |
Weekday |
Повертає день тижня |
Закінчення табл. 17
1 |
2 |
Timer |
Повертає число секунд після опівночі |
DateDiff |
Повертає кількість тимчасових інтервалів між двома датами |
Убудовані діалогові вікна
InputBox служить для введення інформації. Виводить на екран діалогове вікно, що містить повідомлення, поле введення, дві кнопки OK, Cansel .Установлює режим чекання введення тексту користувача й натискання кнопки, а потім повертає значення типу String по натисканню кнопки ОК, що містить текст, уведений у поле введення. При натисканні Cansel повертає порожній рядок Empty. Результат цієї функції завжди рядок.
Синтаксис:
InputBox (Promt [,Title] [,Default] [,Xpos] [,Ypos] [,Helpfile, Context), де
Promt –повідомлення,
Default -поле введення за замовчуванням,
Xpos Ypos -відстань від границі вікна до краю екрана,
Helpfile -відомості про діалогове вікно,
Context -номер розділу довідкової системи.
Наприклад:
X=InputBox («уведіть х», «Приклад»)
If X=Empty then Exit Sub
MsgBox служить для виводу інформації.
Синтаксис:
MsgBox (Promt [,Buttons] [,Title] [,Helpfile, Context]), де
Promt –повідомлення,
Buttons – кнопки (за замовчуванням ОК),
Title –заголовок,
Helpfile -відомості про діалогове вікно,
Context -номер розділу довідкової системи.
У VBA є вже розглянуті нами функції для роботи з масивами, перетворення типів і деякі інші.
Функція RGB.
Об'єкти Font і Interior мають властивість Color, використовуване для установки кольору шрифту й кольору заливання чарунок діапазону. Для установки цієї властивості використовується функція RGB(r, g, b), що має аргументи:
Red - червоний
Green - зелений
Blue – синій
Кожний з аргументів являє собою число від 0 до 255. Функція RGB за значенням аргументів формує будь-який колір, змішуючи червоний, зелений і синій компонент різної інтенсивності.
Розглянемо приклад, у якому за допомогою функції RGB у циклі 15 разів міняється колір шрифту «Хлопці, давайте вчити VBA» в чарунці А1.
Public Sub proc1()
Dim x As Integer
Dim t As Integer
Dim z As Integer
Dim u As Integer
Worksheets(1).Activate
Range("A1").Value = "Хлопці, давайте вчити VBA"
With Range("A1").Font
.Size = 20
.Bold = True
For x = 1 To 15
y = Int(255 * Rnd())
z = Int(255 * Rnd())
u = Int(255 * Rnd())
Randomize
.Color = RGB(y, z, u)
MsgBox "властивість Color=RGB(" & y & "," & z & "," & u & ")"
Next x
End With
Range("A1").Clear
End Sub
Відзначимо, що об'єкти Font і Interior мають іншу властивість - ColorIndex, призначене для завдання кольору шрифту й тла відповідно. Значення властивості ColorIndex може бути встановлено рівним будь-якому цілому числу від 0 до 56 (убудована колірна палітра Excel).
Об'єкт Interior має властивості:
PatternColor. Використовується для установки RGB – кольору штрихування діапазону;
Pattern. Використовується для установки фонового візерунка внутрішності діапазону. Значення властивості – одна з двадцяти констант Excel;
PatternColorIndex. Використовується для установки кольору фонового візерунка діапазону в один з 56 кольорів убудованої палітри Excel.
Функції користувача.
Функція Function створюється за допомогою команди Insert/Procedure/Function
Синтаксис:
Function <ім'я функції> (<список аргументів>)
[<тіло функції>]
End Function ,
де <тіло функції> - послідовність інструкцій, виконуємих під час здобування значення функції.
Функція зберігається в категорії «визначена користувачем» у майстра функцій. Як правило, функція користувача повертає одне значення, але може повертати й масив значень. Може бути викликана з чарунки робочого листа.
У тілі функції Function обов'язково повинен бути оператор, що привласнює імені функції значення.
Саме ж тіло функції складається з тих же операторів, що й тіло процедури Sub.
Завдання до лабораторної роботи 8
Задано вектор C(c1, c2, … сN). Двома способами побудуйте матрицю G(і,j) розміром (nn) за зазначеним у варіанті правилом (табл.19), написавши функцію користувача Matr( ).
1спосіб. Побудуйте матрицю, застосувавши, оператори IF-THEN. Для цього на робочому листі Excel уведіть дані так, як показано у таблиці 18.
Таблиця 18
|
А |
B |
C |
… |
|
1 |
с1 |
с2 |
с3 |
… |
сn |
2 |
i j |
1 |
2 |
… |
n |
3 |
1 |
= Matr( ) |
|
|
|
4 |
2 |
|
|
|
|
… |
… |
|
|
|
|
|
n |
|
|
|
|
На стандартному листі модуля наберіть функцію користувача Matr( ), оголосивши, що її значення має тип Variant. Аргументами функції Matr( ) повинні бути змінні C( і, j), що мають тип Variant. Уведіть функцію в чарунку ”B3”. При передачі аргументів функції вкажіть, що вектор C має абсолютні координати, у векторів і і j одна з координат абсолютна, інша – відносна. Далі копіюйте функцію Matr( ) у сусідні осередки. Не забувайте опцію Option Base1.
2спосіб. Побудуйте матрицю (nn), використовуючи оператори FOR-NEXT. Синтаксис оператора вимагає знання початкового й кінцевого значення параметра циклу. Для визначення кінцевого значення передайте функції Matr1( ) змінну C типу Variant і використовуйте інструкції
N=C.Columns.Count, якщо вектор C розташований на робочому листі в рядку
N=C.Rows.Count, якщо вектор C розташований на робочому листі в стовпці.
Нагадуємо, що функція користувача вимагає наявність оператора, що привласнює імені функції визначеного значення. Тому що елементи матриці Matr1(і, j) підраховуються за різними формулами залежно від і і j, варто запастися допоміжним динамічним масивом а( ), визначивши потім його розміри за допомогою оператора Redim a(N,N) і обчисливши а(і, j) за правилом у Вашому варіанті. Після цього потрібно застосувати оператор Matr1=а.
Тому що функція Matr1( ) повертає не одне значення, а масив, на робочому листі Excel потрібно виділити діапазон чарунок, куди будуть уміщені елементи матриці. У рядку формул увести за допомогою майстра функцій формулу
=Т(А1:А?),
де А1:А? – діапазон зі значеннями вектора C, і натиснути <Ctrl>+<Shift>+<Enter>.
Таблиця 19
Варіант |
Завдання |
1 |
2 |
1 |
, де n=3 і C=(3, 4, 1) |
2 |
, де n=4 і C=(2, 4, 1, 7) |
3 |
, де n=5 і C=(6, 4, 2, 7, 6) |
4 |
, де n=4 і C=(1, 2, 1, 7) |
5 |
, де n=6 і C=(1, 3, 1, 7, 2, 2) |
6 |
, де n=7 і C=(1, 4, 1,3,4, 5, 7) |
7 |
, де n=4 і C=(1, 4, 8, 7) |
8 |
, де n=5 і C=(2,9,1,7,3) |
9 |
де n=6 і C=(1, 2, 1, 7, 8, 2) |
10 |
де n=7 і C=(5, 1, 1, 7, 1, 2, 1) |
Напишіть процедуру розв’язання системи лінійних рівнянь АХ=В, де А – матриця системи (5×5), Х – вектор невідомих (х1, х2, х3, х4, х5), В – стовпець вільних членів.
Нагадуємо, що Х=А-1В.