Основні функції vba. Створюємо свою першу функцію Excel. Створення функції у VBA з необов'язковими аргументами

28.03.2020 Огляди

Dim nResult As Integer

nMult1 = CInt(InputBox("Введіть перше число: ")) nMult2 = CInt(InputBox("Введіть друге число: ")) nResult = fMultiply(nMult1, nMult2)

Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd

4. Для того, щоб закоментувати код AutoNew() , виділіть весь код цієї процедури (включаючи Public Sub AutoNew() та End Sub ) та натисніть кнопку Comment Block на панелі інструментів Edit .

3.9. Вбудовані функції мови VBA

3.9.1. Що таке вбудовані функції

У мові програмування VBA передбачено кілька десятківвбудованих функцій. Вони доступні в будь-якій програмі на мові VBA, при цьому байдуже, в середовищі якої програмного продуктуми - Excel, Word, Access чи, наприклад, AutoCAD. Вони використовуються дуже активно, і в багатьох ситуаціях без них не обійтися. Професійні програмісти застосовують їх абсолютно автоматично, а звичайним користувачамхочеться порадити витратити кілька годин на знайомство з ними, бо без знання цих функцій ефективно працювати у VBA не вдасться. Додатковим аргументом на користь їх вивчення є те, що практично ідентичний набір функцій є у звичайному Visual Basicі VBScript, а багато з цих функцій з тими ж назвами та синтаксисом зустрічаються і в інших мовах програмування – C++, Delphi, Java, JavaScript тощо.

У довідку з VBA вбудовані функції згруповані за літерами (рис. 3.2).

Багато слухачів на курсах запитували: а чи немає довідки щодо цих функцій російською мовою? На жаль, такої довідки мені знайти не вдалося, тож спробую навести коротку довідку у цій книзі. Далі буде розказано про більшість активних функцій мови VBA (математичні функції, такі як косинус або тангенс, які в практичній роботі майже не використовуються, і фінансових функцій ми розглядати не будемо). Повний синтаксис функцій економії місця наводитися нічого очікувати: головне - розуміння, що робить кожна функція й у яких ситуаціях її можна використовувати.

Функції у наступних розділах згруповані за своєю функціональністю. Якщо потрібно знайти інформацію просто на ім'я функції, можна скористатися предметним покажчикомнаприкінці книги.

Рис. 3.2. Довідка щодо вбудованих функцій

3.9.2. Функції перетворення та перевірки типів даних

У програмах на VBA часто доводиться перетворювати значення з одного типу даних на інший. Наведу кілька типових ситуацій, коли цим доводиться займатися:

перетворення з рядкового значення в числове прийому значення від користувача через InputBox() ;

перетворення значення дати/часу на рядкове, коли нам потрібно відобразити дату або час однаково незалежно від регіональних налаштувань на комп'ютерах користувачів;

перетворення значення з рядкового на дату/час для застосування спеціальних функцій дати/часу.

Найчастіше для конвертації типів даних використовуються функції, ім'я яких складається з префікса "C" (від слова Convert) та імені типу даних. Перелік цих функцій наступний: CBool(), CByte(), CCur(), CDate(),

CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr().

Переглянути, що в результаті вийшло, можна за допомогою функції TypeName() , яка повертає ім'я типу даних, що використовується, наприклад:

nVar1 = CInt(InputBox("Введіть значення")) MsgBox TypeName(nVar1)

У цьому випадку ця функція поверне "Integer".

Крім того, існує ще кілька корисних конвертації функцій.

Str() - дозволяє перевести числове значення рядкове. Робить майже те саме, що і CStr() , але при цьому вставляє пробіл перед позитивними числами.

Val() - "витягує" із суміші цифр і букв лише числове значення. При цьому функція читає дані зліва направо і зупиняється на першому нечисловому значенні (допускається єдине нечислове значення - точка, яка відокремлюватиме цілу частину від дробової). Дуже зручно, коли у нас упереміж із числовими даними прописуються одиниці виміру або валюта.

IsNumeric() та IsDate() - перевіряють значення на відповідність, щоб не виникло помилок при конвертації. Для перевірки на відповідність спеціальним значенням можна використовувати функції IsArray(), IsEmpty(),

IsError(), IsMissing(), IsNull() та IsObject() . Всі ці функції повертають-

ють True або False залежно від результатів перевірки переданого їм значення.

Hex() і Oct() - перетворюють десяткові дані в рядкове уявлення шістнадцяткових і вісімкових значень.

3.9.3. Рядкові функції

Це функції, що найчастіше використовуються. Потрібні вони постійно, і знати їх дуже добре.

Asc() - ця функція дозволяє повернути числовий код переданого символу. Наприклад, Asc("D") поверне 68. Цю функцію зручно використовувати для визначення наступної або попередньої літери. Зазвичай вона використовується разом з функцією Chr() , яка здійснює зворотну операцію - повертає символ за переданим його числовим кодом. Наприклад, такий код Excel дозволяє написати в комірки з A1 по A20 послідовно літери російського алфавіту від A до У:

Dim n, nCharCode As Integer n = 1

nCharCode = Asc("А") Do While n<= 20

ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode)

Синтаксис та програмні конструкції VBA

nCharCode = nCharCode + 1 Loop

Варіанти цієї функції - AscB() та AscW(). AscB() повертає лише перший байт числового коду для символу, а AscW() повертає код для символу в кодуванні Unicode.

Chr() - повертає символ за його числовим кодом. Крім того, що використовується у парі з функцією Asc() (див. попередній приклад), без неї не обійтися ще в одній ситуації: коли потрібно вивести службовий символ. Наприклад, нам потрібно надрукувати у Word значення "Газпром" (у лапках). Лапка - це службовий символ, і спроба використати рядок виду:

Selection.Text = "Газпром"

призведе до синтаксичної помилки. А ось так все буде гаразд:

Selection.Text = Chr(34) & "Газпром" & Chr(34)

Є варіанти цієї функції - ChrB() та ChrW(). Працюють аналогічно до таких же варіантів для функції Asc() .

InStr() та InStrRev() - одні з найпопулярніших функцій. Дозволяють виявити в тілі рядкову змінну послідовність символів і повернути її позицію. Якщо послідовність не виявлена, повертається 0. Функція InStr() шукає з початку рядка, а InStrRev() - з кінця.

Left() , Right() , Mid() - дозволяють взяти вказану кількість символів з існуючої рядкової змінної зліва, праворуч чи з середини відповідно.

Len() - повертає число символів у рядку (довжину рядка). Часто використовується із циклами, операціями заміни тощо.

LCase() та UCase() - переводять рядок у нижній та верхній регістри відповідно. Часто використовуються для підготовки значення до порівняння, коли регістр не важливий (прізвища, назви фірм, міст тощо).

LSet() і RSet() - заповнюють одну змінну символами інший без зміни її довжини (відповідно ліворуч і праворуч). Зайві символи обрізаються, на місце відсутні підставляються прогалини.

LTrim() , RTrim() , Trim() - прибирають прогалини відповідно ліворуч, праворуч або ліворуч, і праворуч.

Replace() - замінює у рядку одну послідовність символів на іншу.

Space() і String() - повертають рядок із зазначеної вами кількості прогалин або символів відповідно. Зазвичай використовуються для форма-

Практично весь програмний код модулів VBA міститься у процедурах двох типів Sub (підпрограми) та Function (функції). Основне завдання процедури-функції Function – це обчислення деякого значення та повернення його в точку виклику процедури-функції.

Синтаксис процедури-функції Function:

Function Ім'я_Функції(аргументи As) As

Ім'я_Функції = Повертається_Значення

End Function

Процедури функції можуть бути використані в різних виразах.

Приклад 1

Наприклад, найпростіша процедура-функція Function:

Function F1(x As Currency) As Currency

Function F1(x) можна використовувати у подальших обчисленнях (програмному коді модуля). Процедуру типу Function можна виконати лише викликавши її з іншої процедури. Для цього в процедурі, що викликає, необхідно присвоїти ім'я даної F1(x) деякої змінної.

Приклад 2

Наприклад, Function F1(x) можна використовувати в процедурі MySub(), надавши змінній "у" ім'я F1(x).

Dim y As Single ‘Оголошення змінної y

y = F1 (9) 'Визначаємо F1 (x) для значення x=9

Debug.Print y ‘Виведення значень у вікні Immediate

Function F1 (x As Single) As Single

F1 = x ^ 10 'Повертане значення х у ступені 10

Тут Function F1(x)=$x^(10)$ для значення $ x=9$ повертає у викликаючу процедуру MySub () значення $3,486785E+09$. Якщо для значення або змінної, що повертається функцією, яка використовується в процедурі VBA, не оголошено тип даних, то за замовчуванням буде заданий тип даних Variant.

У VBA використовуються як процедури функції Function, так і вбудовані функції.

Вбудовані функції складаються із двох частин: імені (ідентифікатора) та аргументів. Вбудовані функції – це готові формули VBA, які виконують певні дії над виразами та повертають деяке значення у точку їх виклику.

Функції повертають результуюче значення замість їхнього імені, яке використовується в подальших обчисленнях. Як правило, функції вимагають наявності аргументів, які записуються в дужках через кому. Але деякі функції не потребують аргументів. Наприклад, функція Now(), яка не потребує аргументів, повертає поточну системну дату та час. Ви можете використовувати функції для створення нових виразів або функцій.

Як вставити функцію у текст програми? Щоб використовувати функцію виразів, необхідно ввести її ім'я в оператор VBA. Для виклику вбудованої функції, яка не вимагає аргументів, достатньо ввести її ім'я (наприклад, Now) у код програми модуля:

Sub MyDate ()

Dim TD 'Оголошення змінної TD

TD = Now 'Визначаємо поточну системну дату та час

Debug.Print TD 'Виведення значень у вікні Immediate

Для виклику функції, яка потребує введення одного або кількох аргументів, необхідно ввести в правій частині оператора присвоєння її ім'я із ув'язненими в дужках параметрами (значеннями аргументів). Наприклад, для виклику вбудованої Function Log (N) з однією змінною N у процедурі типу Sub змінної Log_N надано ім'я функції Log (50) зі значенням аргументу рівного 50.

Sub Натуральний логарифм ()

Dim LogN ‘Оголошення змінної LogN

Debug.Print LogN ‘Виведення значень у вікні Immediate

Зауваження 1

Тут вбудована функція Log (N) для значення аргументу рівного 50 повертає значення 3,91202300542815 в точку виклику Log (50) викликає процедури "Sub логарифм (Sub)". Функцію можна викликати як за допомогою окремого оператора VBA, так і помістивши її ім'я зі списком значень аргументів (параметрів) у формулу або вираз у програмі VBA. У VBA для скорочення запису використовується механізм вкладення функцій, який дозволяє вказувати виклик однієї функції як аргумент для іншої функції. У цьому випадку значення, що повертається першою функцією, використовується як аргумент для наступної функції.

VBA має великий набір вбудованих функцій і процедур, що спрощують програмування, які можна розділити на наступні категорії:

  • математичні;
  • функції перевірки типів;
  • функції обробки рядків;
  • функція форматування;
  • функції перетворення форматів;
  • функції дати та часу.

Математичні функції

До математичних функцій відносять:

  • Abs(x) - модуль аргументу $x$;
  • Cos(x) - косинус аргументу $x$;
  • Exp(x) - зведення основи натурального логарифму до $x$;
  • Log(x) - логарифм натурального аргументу $x$;
  • Rnd - випадкове число з інтервалу;
  • Sin(x) – синус аргументу $x$;
  • Sqr(x) - квадратний корінь із $x$;
  • Atn(x) - арктанген від $x$;
  • Tan(x) - тангенс від $ x $;
  • Sgn(x) – знак $x$.

Fix(x) та Int(x) обидві функції відкидають дробову частину числа та повертають ціле значення. Різниця між цими функціями полягає у негативних значень аргументу. Int(x) повертає найближче від'ємне ціле число, менше або рівне х, а Fix(x) – найближче негативне ціле число, більше або рівне х.

Функції перевірки типів

Наведемо функції, що визначають яким типом є змінна:

  • IsArray(х) – функція перевіряє, чи є змінна масивом;
  • IsDate(х) визначає, чи є змінна датою;
  • IsError(х) визначає, чи є змінна кодом помилки;
  • IsNull(х) визначає, чи є змінна порожнім значенням;
  • IsNumeric(х) визначає чи є змінна числовим значенням;
  • IsObject(х) визначає чи є змінна об'єктом.

Функція форматування

Функція форматування повертає значення типу Variant (String), що містить вираз, оформлений згідно з синтаксисом функції:

Format(Вираз[,Формат [,Перший день тижня[,Перший Тиждень Року]]]),де:

  • Вираз – обов'язковий аргумент (будь-який допустимий вираз – комбінація ключових слів, операторів, змінних та констант, результатом якої є рядок, число або об'єкт);
  • Формат – необов'язковий параметр (будь-яке допустиме іменоване або визначене користувачем вираз формату).

Якщо до імені функції додається знак $, функція повертає значення типу String., то функція повертає значення типу String.

При створенні власного числового формату можна використовувати такі символи:

  • 0 – резервує позицію цифрового розряду. Відображає цифру або нуль. Якщо у форматованого числа є якась цифра в цій позиції розряду, де в рядку формату знаходиться 0, функція відображає цю цифру, якщо ні, то в цій позиції відображається нуль;
  • "#" - дія даного символу аналогічно дії 0 з тією різницею, що незначні нулі не відображаються;
  • . – резервує позицію десяткового роздільника, визначає, скільки розрядів необхідно відображати ліворуч та праворуч від десяткової точки;
  • % – резервує процентне відображення числа;
  • . - Поділяє сотні від тисяч.

Функції перетворення форматів

До них відносять:

  • Val(рядок) – повертає числа, які у рядку, як числове значення відповідного типу.
  • Str(число) – повертає значення типу Variant (String), що є рядковим уявленням числа.

Крім функцій Val і Str є ряд функцій перетворення типів виразів.

Функції обробки рядків

Серед безлічі функцій можна виділити такі:

  • Chr(код) – перетворює ASCII – код у рядок. Наприклад, Chr(10) здійснює перехід на новий рядок, Chr(13) – повернення каретки;
  • Mid(string, pos[,length]) – повертає підрядок рядка, що містить вказану кількість символів, де String – рядковий вираз, з якого витягується підрядок;
  • Pos - позиція символу в рядку String, з якого починається потрібне підрядження;
  • Length – число символів, що повертаються, підрядки;
  • Len(рядок) – повертає кількість символів рядка.

Функції часу та дати

Повертають значення типу Variant, що містить системну дату, поточний час і т. д. Наприклад, функція Date повертає значення, що містить системну дату.

Арифметичні вирази Visual Basic.

Теоретична частина

Виразами та функціями

Лабораторна робота №4. Робота з арифметичними

Запитання для контролю

1. Які компоненти дозволяють створювати статичні зображення у додатку?

2. Як помістити малюнок на форму? Які методи для цієї мети існують і в чому їхня відмінність?

3. Картинки якого формату може підключати до програми компонент Image?

4. Яка властивість об'єкта Image відповідає за масштабування? За видимість картинки?

Мета роботи:ознайомитися з арифметичними виразами та математичними функціями мови Visual Basic; навчитися розробляти програми з використанням виразів та математичних функцій

Вирази застосовуються для операцій над даними. Залежно від даних і операцій вирази поділяють на арифметичні, логічні та символьні

Арифметичні вирази- Це послідовність чисел, констант, змінних, функцій, які з'єднані між собою знаками арифметичних операцій. Окремим випадком виразу є просто константа, змінна або виклик функції.

Арифметичні операції мови Visual Basic наведено у Таблиці 4.1.

Таблиця 4.1 - Арифметичні операції мови Visual Basic

Пріоритетвиконання операцій (у порядку убування): зведення в ступінь, множення та розподіл, цілісне розподіл, обчислення залишку, додавання та віднімання. Обчислення проводяться зліва направо. Дужки змінюють пріоритет.

Приклади:

14 /5*2 = 5.6 – операції одного пріоритету виконуються зліва направо

14\5*2 = 1 – множення має вищий пріоритет і при цілісному розподілі дробова частина відкидається

27^1/3 = 9 - зведення в ступінь має найвищий пріоритет

27^(1/3) = 3 – дужки змінюють послідовність операцій

У мові Visual Basic є широкий набір вбудованих (стандартних) функцій, що полегшує написання програм. Розрізняють математичні функції, функції обробки рядків, функції до роботи з датами і часом, фінансові.

Математичні функції:

Abs (x) – обчислює модуль аргументу



Atn (x) – обчислює арктангенс числа x

Sin (x) – обчислює синус числа x

Cos (x) – обчислює косинус числа x

Tan (x) – обчислює тангенс числа x

Exp(x) – обчислює e^x

Log (x) – обчислює натуральний логарифм

Sqr (x) – обчислює квадратний корінь

Rnd() – повертає випадкове число в діапазоні від 0 до 1

Int (x) - обчислює найбільше ціле число, що не перевищує x

Fix (x) – обчислює округлене число (відкидає дрібну частину аргументу)

CInt(x) – повертає аргумент, округлений до цілого за правилами округлення математики

Sgn(x) – повертає знак числа

X^(1/n) – витягує корінь n-ного ступеня з X

Hex (x) – переводить десяткове число у шістнадцяткове

Oct (x) – переводить десяткове число у вісімкове

Приклади округлення чисел:

Int(7.32) = 7 CInt(5.5) = 6 Fix(-7.32) = -7

Int(-7.32) = -8 CInt(-7.5) = -7

Значення аргументів у тригонометричних функціях задаються у радіанах!

Для переведення аргументу із градусів у радіани використовується формула:

Аргумент (у радіанах) = аргумент (у градусах) * ПІ / 180

Число ПІ може бути визначене за формулою:

ПІ = Atn (1) * 4

Повні відомості про вбудовані функції та правила їх застосування можна знайти у довідковій системі Visual Basic.

Таблиця 6.1. Вбудовані математичні функції
Функція Опис
Abs Абсолютне значення
Atn Арктангенс
Cos Косинус числа
Exp Повертає число e (2.718282), зведене до міри аргументу функції.
Fix Відкидає дрібну частину числа і повертає цілу. В результаті для позитивних чисел виходить число менше, ніж вхідний (Fix(2.5) поверне 2), для негативних - більше (Fix(-2.5) поверне -2)
Int Відкидає дрібну частину числа і повертає цілу. Для позитивних виходить число менше введеного (Int(2.5) поверне 2), для негативних - так само менше (Int(-2.5) поверне -3).
Log Повертає натуральний логарифмчисла
Rnd Повертає випадкове число типу Single, причому це число знаходиться між 0 і 1. Для ініціалізації генератора випадкових чисел використовуйте директиву Randomize - її треба викликати до виклику Rnd.
Sgn Функція призначена визначення знака числа. Якщо число позитивне - повертає 1. Для нуля функція поверне 0, для негативного числа -1.
Sin Сінус
Sqr Квадратний корінь
Tan Тангенс

Давайте розглянемо приклад. Додамо в документ Microsoft Word кнопку, назвемо її cmd_Calc , напишемо її як Обчислення та додамо наступний код (листинг 6.1.), що ілюструє роботу розглянутих функцій.

Dim dblNumber As Double "Змінна, використовувана в обчисленнях Dim varResult "Змінна типу Variant dblNumber = Val(InputBox("Введіть число")) "Обчислюємо абсолютне значення введеного числа "Спочатку привласним результат змінної varResult "Далі - виведемо , скористаємося знаком "+" для "конкатенації рядків, в інших випадках "викликатимемо функції безпосередньо "в MsgBox"e "Зверніть увагу на те, що ми конвертуємо "числові значення в рядки за допомогою функції Str varResult = Abs(dblNumber) MsgBox ( "Абсолютне значення" + _ Str(dblNumber) + "рівняється" + Str(varResult)) "Арктангенс MsgBox ("Арктангенс" + _ Str(dblNumber) + "рівняється" + _ Str(Atn(dblNumber))) "Косинус ("Косинус" + _ Str(dblNumber) + "рівняється" + _ Str(Cos(dblNumber))) "e у ступені введеного числа MsgBox ("Кількість e у ступені" + _ Str(dblNumber) + " дорівнює " + _ Str(Exp(dblNumber))) "Функція Fix MsgBox ("Результат роботи фун кции Fiх для " + _ Str(dblNumber) + " дорівнює " + _ Str(Fix(dblNumber))) "Функція Int MsgBox ("Результат роботи функції Int для " + _ Str(dblNumber) + " дорівнює " + _ Str( Int(dblNumber))) "Натуральний логарифм MsgBox ("Натуральний логарифм" + _ Str(dblNumber) + " дорівнює " + _ Str(Log(dblNumber))) "Отримаємо кілька випадкових чисел "перше число - від 0 до 1" друге - від 0 до 10. "Третє - від 25 до 100" Четверте - ціле від 0 до 34 Randomize MsgBox ("Група випадкових чисел:" + _ Str(Rnd()) + ", " + _ Str(Rnd() * 10) + ", " + _ Str(Rnd() * 75 + 25) + ", " + _ Str(Int(Rnd() * 34))) "Функція Sgn MsgBox ("Результат роботи Sgn для " + _ Str (dblNumber) + " дорівнює " + _ Str(Sgn(dblNumber))) "Cinus MsgBox ("Синус" + _ Str(dblNumber) + " дорівнює " + _ Str(Sin(dblNumber))) "Квадратний корінь MsgBox (" Квадратний корінь " + _ Str(dblNumber) + " дорівнює " + _ Str(Sqr(dblNumber))) "Тангенс MsgBox ("Тангенс" + _ Str(dblNumber) + " дорівнює " + _ S tr(Tan(dblNumber))) Лістинг 6.1. Обробник події Click кнопки cmd_Calc

Зверніть увагу на алгоритм отримання випадкового числа, що знаходиться у певному діапазоні, за допомогою функції Rnd. Припустимо, нам потрібно отримати довільне число від 15 до 40 . Отримаємо, спочатку, число від 0 до 40 . Очевидно, що для цього нам знадобиться такий виклик: Rnd ()*40.

Щоб "підняти" рівень найменшого випадкового числа, що повертається виразом, до 15 зробимо наступне.

По-перше, обчислимо різницю 40 і 15 – у нас вийде 25 . Отже, щоб отримати випадкове число від 0 до 25 можна використовувати виклик Rnd ()*25.

По-друге, додамо до отриманого випадкового числа 15 . Тепер вираз для отримання випадкового числа від 15 до 40 має такий вигляд: Rnd ()*25+15.

Перевіримо цей вислів на правильність. Функція RndЯк відомо, повертає випадкові числа від 0 до 1 . Якщо функція поверне 0 - результат обчислення виразу дорівнюватиме 15 (0*25+15) . Якщо функція поверне 1 - результат дорівнюватиме 40 (25*1+15) . Проміжні значення Rndдадуть шукані випадкові числа між 15 і 40 .

Обробник натискання кнопки cmd_Len (листинг 6.2.) міститиме рішення наступного завдання: повідомити користувача довжину введеного тексту. Очевидно, для вирішення цього завдання нам знадобиться функція Len.

"Змінна для зберігання вхідного рядка Dim str_InpStr As String "Змінна для зберігання знайденої довжини рядка Dim lng_StrLen As Long str_InpStr = InputBox("Введіть рядок") "Обчислюємо довжину рядка lng_StrLen = Len(str_InpStr) Ms _ str_InpStr + "_ дорівнює " + Str(lng_StrLen) + _ "символам") Лістинг 6.2. Приклад використання функції Len

На рис. 6.2. Ви можете бачити результат обчислення довжини рядка.


Рис. 6.2.

Тепер займемося конверсією символів – функціями LCase та UCase (листинг 6.3.).

"Змінна для зберігання вхідного рядка Dim str_InpStr As String "Змінна для зберігання зміненого рядка Dim str_NewStr As String str_InpStr = InputBox("Введіть текст") "У str_NewStr опиниться введений рядок "в якому всі великі літери замінені рядковими str ("Змінений рядок: " + str_NewStr) "Тепер у str_NewStr буде той самий рядок "в якому всі літери стали великими str_NewStr = UCase(str_InpStr) MsgBox ("Змінений рядок: " + str_NewStr) Лістинг 6.3. Приклад використання функцій LCase та UCase

На черзі - вирізання символів - функції Mid, LTrim, Rtrim, Left, Right (листинг 6.4.) Серед цих функцій найбільш потужною є Mid - використовуючи її, можна робити з рядками дуже багато всього.

"Змінна для зберігання вхідного рядка Dim str_InpStr As String "Змінна для зберігання вирізаних символів Dim str_NewStr As String "Задамо рядок, з якого зручно буде працювати str_InpStr = " Привіт, Олександр " "Функції видалення пробілів " кінцем символ "_" для того, щоб "краще було видно наявність" або відсутність пробілів MsgBox ("Ми працюємо з таким рядком: " + _ "_" + str_InpStr + "_") "LTrim - присвоюємо результати роботи "змінною і виводимо інформацію в MsgBox str_NewStr = LTrim(str_InpStr) MsgBox ("Результат роботи LTrim: " + _ "_" + str_NewStr + "_") "RTrim MsgBox ("Результат роботи RTrim: " + _ "_" + RTrim(str_In _") "Trim MsgBox ("Результат роботи Trim: " + _ "_" + Trim(str_InpStr) + "_") "Left - вирізаємо з рядка str_InpStr 12 "символів попередньо очистивши її "від початкових пробілів str_NewStr = Left(LTrim (str_InpStr), 12) MsgBox ("Перші 12 символів зліва: " + _ str_NewStr) "Right - аналогічно Вирізаємо 9 символів праворуч str_NewStr = Right(RTrim(str_InpStr), 9) MsgBox ("Перші 9 символів праворуч: " + _ str_NewStr) "Функція Mid - для початку виведемо по одному символу "з другої та п'ятнадцятої позиції рядка " попередньо очищеної від зайвих пробілів "на початку і в кінці str_NewStr = Mid(Trim(str_InpStr), 2, 1) MsgBox ("Другий символ введеного рядка: " MsgBox ("П'ятнадцятий символ введеного рядка: " + _ str_NewStr) "Виведемо 5 символів, починаючи з 15 символів str_NewStr = Mid(Trim(str_InpStr), 15, 5) MsgBox ("П'ять символів рядка з 15-ї позиції: " str_NewStr) Лістинг 6.4. Приклад використання функцій для вирізування символів

Тепер розглянемо приклади роботи функції

Практично весь програмний код модулів VBA міститься у процедурах двох типів Sub (підпрограми) та Function (функції). Основне завдання процедури-функції Function – це обчислення деякого значення та повернення його в точку виклику процедури-функції.

Синтаксис процедури-функції Function:

Function Ім'я_Функції(аргументи As) As

Ім'я_Функції = Повертається_Значення

End Function

Процедури функції можуть бути використані в різних виразах.

Приклад 1

Наприклад, найпростіша процедура-функція Function:

Function F1(x As Currency) As Currency

Function F1(x) можна використовувати у подальших обчисленнях (програмному коді модуля). Процедуру типу Function можна виконати лише викликавши її з іншої процедури. Для цього в процедурі, що викликає, необхідно присвоїти ім'я даної F1(x) деякої змінної.

Приклад 2

Наприклад, Function F1(x) можна використовувати в процедурі MySub(), надавши змінній "у" ім'я F1(x).

Dim y As Single ‘Оголошення змінної y

y = F1 (9) 'Визначаємо F1 (x) для значення x=9

Debug.Print y ‘Виведення значень у вікні Immediate

Function F1 (x As Single) As Single

F1 = x ^ 10 'Повертане значення х у ступені 10

Тут Function F1(x)=$x^(10)$ для значення $ x=9$ повертає у викликаючу процедуру MySub () значення $3,486785E+09$. Якщо для значення або змінної, що повертається функцією, яка використовується в процедурі VBA, не оголошено тип даних, то за замовчуванням буде заданий тип даних Variant.

У VBA використовуються як процедури функції Function, так і вбудовані функції.

Вбудовані функції складаються із двох частин: імені (ідентифікатора) та аргументів. Вбудовані функції – це готові формули VBA, які виконують певні дії над виразами та повертають деяке значення у точку їх виклику.

Функції повертають результуюче значення замість їхнього імені, яке використовується в подальших обчисленнях. Як правило, функції вимагають наявності аргументів, які записуються в дужках через кому. Але деякі функції не потребують аргументів. Наприклад, функція Now(), яка не потребує аргументів, повертає поточну системну дату та час. Ви можете використовувати функції для створення нових виразів або функцій.

Як вставити функцію у текст програми? Щоб використовувати функцію виразів, необхідно ввести її ім'я в оператор VBA. Для виклику вбудованої функції, яка не вимагає аргументів, достатньо ввести її ім'я (наприклад, Now) у код програми модуля:

Sub MyDate ()

Dim TD 'Оголошення змінної TD

TD = Now 'Визначаємо поточну системну дату та час

Debug.Print TD 'Виведення значень у вікні Immediate

Для виклику функції, яка потребує введення одного або кількох аргументів, необхідно ввести в правій частині оператора присвоєння її ім'я із ув'язненими в дужках параметрами (значеннями аргументів). Наприклад, для виклику вбудованої Function Log (N) з однією змінною N у процедурі типу Sub змінної Log_N надано ім'я функції Log (50) зі значенням аргументу рівного 50.

Sub Натуральний логарифм ()

Dim LogN ‘Оголошення змінної LogN

Debug.Print LogN ‘Виведення значень у вікні Immediate

Зауваження 1

Тут вбудована функція Log (N) для значення аргументу рівного 50 повертає значення 3,91202300542815 в точку виклику Log (50) викликає процедури "Sub логарифм (Sub)". Функцію можна викликати як за допомогою окремого оператора VBA, так і помістивши її ім'я зі списком значень аргументів (параметрів) у формулу або вираз у програмі VBA. У VBA для скорочення запису використовується механізм вкладення функцій, який дозволяє вказувати виклик однієї функції як аргумент для іншої функції. У цьому випадку значення, що повертається першою функцією, використовується як аргумент для наступної функції.

VBA має великий набір вбудованих функцій і процедур, що спрощують програмування, які можна розділити на наступні категорії:

  • математичні;
  • функції перевірки типів;
  • функції обробки рядків;
  • функція форматування;
  • функції перетворення форматів;
  • функції дати та часу.

Математичні функції

До математичних функцій відносять:

  • Abs(x) - модуль аргументу $x$;
  • Cos(x) - косинус аргументу $x$;
  • Exp(x) - зведення основи натурального логарифму до $x$;
  • Log(x) - логарифм натурального аргументу $x$;
  • Rnd - випадкове число з інтервалу;
  • Sin(x) – синус аргументу $x$;
  • Sqr(x) - квадратний корінь із $x$;
  • Atn(x) - арктанген від $x$;
  • Tan(x) - тангенс від $ x $;
  • Sgn(x) – знак $x$.

Fix(x) та Int(x) обидві функції відкидають дробову частину числа та повертають ціле значення. Різниця між цими функціями полягає у негативних значень аргументу. Int(x) повертає найближче від'ємне ціле число, менше або рівне х, а Fix(x) – найближче негативне ціле число, більше або рівне х.

Функції перевірки типів

Наведемо функції, що визначають яким типом є змінна:

  • IsArray(х) – функція перевіряє, чи є змінна масивом;
  • IsDate(х) визначає, чи є змінна датою;
  • IsError(х) визначає, чи є змінна кодом помилки;
  • IsNull(х) визначає, чи є змінна порожнім значенням;
  • IsNumeric(х) визначає чи є змінна числовим значенням;
  • IsObject(х) визначає чи є змінна об'єктом.

Функція форматування

Функція форматування повертає значення типу Variant (String), що містить вираз, оформлений згідно з синтаксисом функції:

Format(Вираз[,Формат [,Перший день тижня[,Перший Тиждень Року]]]),де:

  • Вираз – обов'язковий аргумент (будь-який допустимий вираз – комбінація ключових слів, операторів, змінних та констант, результатом якої є рядок, число або об'єкт);
  • Формат – необов'язковий параметр (будь-яке допустиме іменоване або визначене користувачем вираз формату).

Якщо до імені функції додається знак $, функція повертає значення типу String., то функція повертає значення типу String.

При створенні власного числового формату можна використовувати такі символи:

  • 0 – резервує позицію цифрового розряду. Відображає цифру або нуль. Якщо у форматованого числа є якась цифра в цій позиції розряду, де в рядку формату знаходиться 0, функція відображає цю цифру, якщо ні, то в цій позиції відображається нуль;
  • "#" - дія даного символу аналогічно дії 0 з тією різницею, що незначні нулі не відображаються;
  • . – резервує позицію десяткового роздільника, визначає, скільки розрядів необхідно відображати ліворуч та праворуч від десяткової точки;
  • % – резервує процентне відображення числа;
  • . - Поділяє сотні від тисяч.

Функції перетворення форматів

До них відносять:

  • Val(рядок) – повертає числа, які у рядку, як числове значення відповідного типу.
  • Str(число) – повертає значення типу Variant (String), що є рядковим уявленням числа.

Крім функцій Val і Str є ряд функцій перетворення типів виразів.

Функції обробки рядків

Серед безлічі функцій можна виділити такі:

  • Chr(код) – перетворює ASCII – код у рядок. Наприклад, Chr(10) здійснює перехід на новий рядок, Chr(13) – повернення каретки;
  • Mid(string, pos[,length]) – повертає підрядок рядка, що містить вказану кількість символів, де String – рядковий вираз, з якого витягується підрядок;
  • Pos - позиція символу в рядку String, з якого починається потрібне підрядження;
  • Length – число символів, що повертаються, підрядки;
  • Len(рядок) – повертає кількість символів рядка.

Функції часу та дати

Повертають значення типу Variant, що містить системну дату, поточний час і т. д. Наприклад, функція Date повертає значення, що містить системну дату.