Основні функції vba. Створення функції користувача. Приклади функцій користувача. Налагодження функції користувача шляхом встановлення точки зупинки

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

Основна відмінність між функцією-процедурою та іншими процедурами, крім того, що функції повертають значення, а процедури – ні, полягає в тому, що у функції-процедурі використовуються ключові слова Functionі End Function.

Синтаксис:

Function Name()
"VBA Statements
End Function

Function - ключове слово, Що оголошує початок функції

Name – ім'я функції. Імена функцій слідують тим самим правилам, що й імена інших ідентифікаторів VBA.

Arglist - список аргументів цієї функції, необов'язковий елемент.

Type - будь-який тип значення функції, що повертається. Якщо тип не визначений, результат, який повертає функцію-процедуру, має тип Variant.

Name = expression - привласнення функції, яке вказує на VBA, яке значення має повертати функція, необов'язковий елемент. Проте завжди слід включати оператор присвоєння у функції-процедури.

End Function – ключові слова, що закінчують функцію.


Навіть якщо функція не має аргументів (наприклад, Now, Date) в оголошенні функції, необхідно використовувати круглі дужки.

Зазвичай функція призначається до виконання обчислення і повернення результату. Під час оголошення функції-процедури вказується ім'я кожного аргументу, що передається функції. Імена аргументів у списку відокремлюються один від одного комою і повинні дотримуватися правил, які застосовуються до будь-якого ідентифікатора VBA.


Нижче представлений листинг використання найпростішої функції-процедури, яка прибирає початкові та кінцеві прогалини та підраховує кількість символів у виразі.



Без використання функції лістинг би виглядав так:



З цього простого прикладу, думаю, зрозуміла основна ідея використання функцій-процедур - поліпшення читабельності програмного коду та його скорочення (іншими словами, функція-процедура пишеться коли в програмному коді більше 2-3 разів зустрічається той самий "шматок" коду). Справді, якби наша функція-процедура складалася не з одного рядка, а, скажімо, із 10 рядків; і програмний код використав би цю функцію-процедуру 5 разів, то загальний лістинг програми був би меншим на 38 рядків.


Як зазначалося раніше, VBA передає всі аргументи на функцію-процедуру як типи Variant. Можна оголошувати певні типи даних кожного аргументу у списку аргументів.

Практично весь програмний код модулів 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 Натуральний_логарифм ()". Функцію можна викликати як за допомогою окремого оператора 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 повертає значення, що містить системну дату.

При написанні коду VBA Excel набір вбудованих операторів використовують на кожному кроці. Ці оператори поділяються на математичні, рядкові, оператори порівняння та логічні. Далі ми розглянемо кожну групу операторів.

Математичні оператори

Основні математичні оператори VBA перераховані у таблиці нижче.

У правому стовпчику таблиці вказано пріоритет операторів, прийнятий за умовчанням за відсутності дужок. Додаючи у вираз дужки, можна змінювати порядок виконання операторів VBAза своїм бажанням.

Строкові оператори

Основний рядковий оператор Excel VBA – це оператор конкатенації & (злиття):

Оператори порівняння

Оператори порівняння використовуються для порівняння двох чисел або рядків та повертають логічне значення типу Boolean(True або False). Основні оператори порівняння Excel VBA перераховані в цій таблиці:

Логічні оператори

Логічні оператори, як і оператори порівняння, повертають логічне значення типу Boolean(True або False). Основні логічні оператори Excel VBA перераховані у таблиці нижче:

У наведеній вище таблиці перераховані в повному обсязі логічні оператори, доступні в VBA. Повний списоклогічних операторів можна знайти на сайті Visual Basic Developer Center.

Вбудовані функції

В VBA є безліч вбудованих функцій, які можуть бути використані при написанні коду. Нижче перераховані деякі з найчастіше використовуваних:

Функція Дія
Abs Повертає абсолютну величину заданого числа.
  • Abs(-20)повертає значення 20;
  • Abs(20)повертає значення 20.
Chr Повертає символ ANSI, що відповідає числовому значенню параметра.
  • Chr(10)повертає перенесення рядка;
  • Chr(97)повертає символ a.
Date Повертає поточну системну дату.
DateAdd Додає певний часовий інтервал до заданої дати. Синтаксис функції:

DateAdd( інтервал , число , дата )

Де аргумент інтервалвизначає тип часового інтервалу, що додається до заданої датиу кількості, зазначеній у аргументі число .

Аргумент інтервалможе приймати одне з наступних значень:

  • DateAdd(“d”, 32, “01/01/2015”)додає 32 дні до дати 01/01/2015 і таким чином повертає дату 02/02/2015.
  • DateAdd(“ww”, 36, “01/01/2015”)додає 36 тижнів до дати 01/01/2015 та повертає дату 09/09/2015.
DateDiff Обчислює кількість певних часових інтервалів між двома заданими датами.
  • DateDiff(“d”, “01/01/2015”, “02/02/2015”)обчислює кількість днів між датами 01/01/2015 та 02/02/2015, повертає результат 32.
  • DateDiff("ww", "01/01/2015", "03/03/2016")обчислює кількість тижнів між датами 01/01/2015 та 03/03/2016, повертає результат 61.
Day Повертає ціле число, що відповідає дню місяця у заданій даті.

Приклад: Day(“29/01/2015”)повертає число 29

Hour Повертає ціле число, яке відповідає кількості годин у заданому часі.

Приклад: Hour(“22:45:00”)повертає число 22

InStr Приймає як аргументи ціле число і два рядки. Повертає позицію входження другого рядка всередині першого, починаючи пошук із позиції, заданої цілим числом.
  • InStr(1, "От шукане слово", "слово")повертає число 13
  • InStr(14, "От шукане слово, а ось ще шукане слово", "слово")повертає число 38

Примітка:Аргумент-число може бути не заданий, у такому разі пошук починається з першого символу рядка, заданого у другому аргументі функції.

Int Повертає цілу частину заданого числа.

Приклад: Int(5.79)повертає результат 5.

Isdate Повертає Trueякщо задане значення є датою, або False- Якщо датою не є.
  • IsDate(“01/01/2015”)повертає True;
  • IsDate(100)повертає False.
IsError Повертає Trueякщо задане значення є помилкою, або False- Якщо помилкою не є.
IsMissing Як аргумент функції передається ім'я необов'язкового аргументу процедури. IsMissingповертає Trueякщо для аналізованого аргументу процедури не передано значення.
IsNumeric Повертає Trueякщо задане значення може бути розглянуто як число, в іншому випадку повертає False.
Left Повертає задану кількість символів від початку переданого рядка. Синтаксис функції ось такий:

Left( рядок , довжина )

де рядок– це вихідний рядок, а довжина– кількість символів, що повертаються, рахуючи від початку рядка.

  • Left("абвгдежзіклмн", 4)повертає рядок "абвг";
  • Left("абвгдежзіклмн", 1)повертає рядок "а".
Len Повертає кількість символів у рядку.

Приклад: Len("абвгдеж")повертає число 7

Month Повертає ціле число, яке відповідає місяцю у заданій даті.

Приклад: Month(“29/01/2015”)повертає значення 1.

Mid Повертає задану кількість символів із середини переданого рядка. Синтаксис функції:

Mid( рядок , початок , довжина )

де рядок– це вихідний рядок, початок- позиція початку видобувного рядка, довжина– кількість символів, які потрібно вийняти.

  • Mid("абвгдежзіклмн", 4, 5)повертає рядок "дежз";
  • Mid("абвгдежзіклмн", 10, 2)повертає рядок "кл".
Minute Повертає ціле число, що відповідає кількості хвилин у заданому часі. Minute(“22:45:15”)повертає значення 45.
Now Повертає поточну системну дату та час.
Right Повертає задану кількість символів від кінця переданого рядка. Синтаксис функції:

Right( рядок , довжина )

Де рядок– це вихідний рядок, а довжина– це кількість символів, які треба витягти, рахуючи від кінця заданого рядка.

  • Right("абвгдежзіклмн", 4)повертає рядок "клмн";
  • Right("абвгдежзіклмн", 1)повертає рядок "н".
Second Повертає ціле число, яке відповідає кількості секунд у заданому часі.

Приклад: Second(“22:45:15”)повертає значення 15.

Sqr Повертає квадратний корінь числової величини, що передається в аргументі.
  • Sqr(4)повертає значення 2;
  • Sqr(16)повертає значення 4.
Time Повертає системний час.
Ubound Повертає верхній індекс вимірювання заданого масиву.

Примітка:Для багатовимірних масивівяк необов'язковий аргумент може бути зазначено, індекс якого саме виміру треба повернути. Якщо не зазначено, то за замовчуванням 1.

Функція написана на VBA – це код, який виконує обчислення та повертає значення (або масив значень). Створивши функцію, ви можете використовувати її трьома способами:

  1. Як формула на аркуші, де вона може приймати аргументи і повертати значення.
  2. Як частина вашої підпрограми VBA. У процедурі Sub або всередині інших функцій.
  3. У правилах умовного форматування.

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

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

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

У чому відмінність процедури (Sub) від функції (Function)?

Основна відмінність у цьому, що процедура (sub) використовується виконання набору команд, і покликана на відміну функції (function) повертати значення (чи масив значень).

Для демонстрації наведемо приклад. Наприклад, є ряд чисел від 1 до 100 і необхідно відокремити парні від непарних.

За допомогою процедури (sub) ви можете, наприклад, пройтися осередками і виділити непарні за допомогою заливки. А функцію можна використовувати в сусідньому стовпці і вона поверне ІСТИНА або брехня залежно від того парне значення чи ні. Тобто. Ви не зможете змінити колір заливки за допомогою функції на аркуші.

Створення простої функції користувача в VBA

Давайте створимо просту функцію користувача на VBA і подивимося як там все працює.

Нижче наведено код функції, яка з тексту залишає лише цифри, відкидаючи буквені значення.

Function Цифри(Текст As String) As Long Dim i As Long Dim result As String For i = 1 To Len(Текст) If IsNumeric(Mid(Текст, i, 1)) The result = result & Mid(Текст, i, 1 ) Next Цифри = CLng(result) End Function

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

Тепер подивимося як функція працює, спробуємо використати її на аркуші:

Перш ніж розбирати саму функцію відзначимо 2 приємні моменти, які з'явилися після створення:

  • Вона стала доступною, як і будь-яка інша вбудована функція (як створити приховану функцію, Розкажемо далі).
  • Коли ви ввели знак "=" і починаєте вводити ім'я функції, Excel виводить всі збіги і показує не тільки вбудовані функції, але і користувацькі.

Розбираємо функцію покроково

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

Function Цифри(Текст As String) As Long

Слово Functionговорить про початок функції, далі йде її назва, у нашому випадку Цифри.

  • Ім'я функції не може містити пробіли. Крім того, ви не можете назвати функцію, якщо вона стикається з ім'ям посилання на комірку. Наприклад, ви не можете назвати функцію ABC123, оскільки це ім'я також відноситься до комірки в аркуші Excel.
  • Ви не повинні вказувати на свою функцію те саме ім'я, що й існуюча функція. Якщо ви це зробите, Excel надаватиме перевагу вбудованій функції.
  • Якщо хочете розділити слова, можна використовувати символ підкреслення. Наприклад, Сума прописомє припустимим ім'ям.

Після назви у круглих дужках описуються аргументи функції. За аналогією із вбудованими функціями Excel. У нашому випадку використовується єдиний аргумент Текст. Після назви аргументу ми вказали As StringЦе означає, що наш аргумент - текстове значення або посилання на комірку, що містить текстове значення. Якщо ви не вкажете тип даних, VBA розгляне його як Variant(що означає, що можна використовувати будь-який тип даних, VBA його визначить самостійно).

Остання частина першого рядка As Longвизначає тип даних, яка повертає функцію. У нашому випадку функція повертатиме цілі значення. Це також необов'язково.

Другий та третій рядок функції оголошує додаткові внутрішні змінні, які ми будемо використовувати.

Dim i As Long Dim result As String

Змінну iми використовуватимемо для перебору символів. А змінну resultзберігання проміжного результату функції.

Завдання функції - пройти всі символи змінної Текст і зберегти лише ті, що є цифрами. Тому почнемо цикл з 1 до останнього символу.

For i = 1 To Len(Текст)

Len – функція, яка визначає кількість символів.

Основний рядок функції - це перевірка, чи є черговий символ тексту цифрою і якщо так - то збереження його в змінній result

If IsNumeric(Mid(Текст, i, 1)) The result = result & Mid(Текст, i, 1)

Для цього нам потрібна функція IsNumeric- вона повертає Trueякщо текст - число та Falseв іншому випадку.

Функція Midбере з аргументу Текст i-ий символ (значення 1 , вказує що функція Midбере лише 1 символ)/

Функція Next- закриває цикл Forтут усе відомо.

Цифри = CLng(result)

Цим рядком ми перетворюємо текстову змінну result, яка містить усі цифри аргументу Текст, У числове значення. І говоримо, який результат має вивести наша функція Цифри.

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

У наведеному вище коді описані різні частини типової функції користувача, створеної в VBA. У наступних статтях ми детальніше розберемо ці елементи, а також розглянемо різні способивиконання функції VBA в Excel.

Створення функції користувача в VBA Excel, її синтаксис і компоненти. Опис користувальницької функції та її аргументів. Метод Application.MacroOptions.

Користувальницька функція- це процедура VBA, яка здійснює задані обчислення та повертає отриманий результат. Використовується для вставки в комірки робітника листа Excelабо для дзвінка з інших процедур.

Оголошення користувача функції

Синтаксис функції

Function Ім'я ([СписокАргументів]) [Оператори] [Ім'я = вираз] [Оператори] [Ім'я = вираз] End Function

Компоненти функції

  • Static- необов'язкове ключове слово, що вказує на те, що значення змінних, оголошених у функції, зберігаються між викликами.
  • Ім'я- обов'язковий компонент, ім'я функції користувача.
  • СписокАргументів- необов'язковий компонент, один або більше змінних, що представляють аргументи, що передаються у функцію. Аргументи полягають у дужки і поділяються між собою комами.
  • Оператори- необов'язковий компонент, блок операторів (інструкцій).
  • Ім'я = вираз- необов'язковий компонент, присвоєння імені функції значення виразу або змінної. Зазвичай значення присвоюється функції безпосередньо перед виходом з неї.
  • Exit Function- необов'язковий компонент, примусовий вихід із функції, якщо вже надано остаточне значення.

*Один із компонентів Ім'я = виразслід вважати обов'язковим, тому що якщо не надати функції значення, сенс її використання втрачається.

Видимість функції

Видимість функції користувача визначається необов'язковими ключовими словами Public і Private, які можуть бути вказані перед оператором Function (або Static, у разі його використання).

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

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

Якщо ключове слово Public або Private не вказано, функція вважається за промовчанням оголошеною як Public.

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

Приклад функції користувача

Для прикладу ми розглянемо найпростішу функцію користувача, якою в наступному параграфі додамо опис. Називається функція «Ділення», оголошена з типом даних Variant, оскільки її значення, що повертається, може бути і числом, і текстом. Аргументи функції - делимо і дільник - теж оголошені як Variant, так як в осередках Excelможуть бути числові значення різних типів, і функція IsNumeric також перевіряє різні типиданих і вимагає, щоб її аргументи були оголошені як Variant.

Function Поділ(Ділімо As Variant, Дільник As Variant) As Variant If IsNumeric(Діліме) = False Or IsNumeric(Дільник) = False Then Поділ = "Помилка: Ділиме та Дільник повинні бути числами!" Exit Function ElseIf Дільник = 0 Then Поділ = "Помилка: поділ на нуль!" Exit Function Else Поділ = Ділимий / Дільник End If End Function

Ця функція виконує розподіл значень двох осередків робочого листа Excel. Перед поділом перевіряються два блоки умов:

  • Якщо ділене або дільник не є числом, функція повертає значення: «Помилка: делимо і дільник повинні бути числами!», і примусовий вихід з функції оператором Exit Function.
  • Якщо дільник дорівнює нулю, функція повертає значення: «Помилка: поділ на нуль!», і вимушений вихід з функції оператором Exit Function.

Якщо умови, що перевіряються, не виконуються (повертають значення False) проводиться розподіл чисел і функція повертає приватне (результат поділу).

Ви можете скопіювати до себе в стандартний модуль цю функцію і вона буде доступна в розділі «Визначені користувачем» Майстри функцій. Спробуйте вставити функцію «Поділ» у комірку робочого листа за допомогою Майстра та поекспериментуйте з нею.

Практичного сенсу функція «Поділ» не має, але вона добре демонструє як оголошуються, створюються і працюють функції користувача в VBA Excel. А ще вона допоможе продемонструвати, як додавати до функцій та аргументів опису. З повноцінною функцією користувача ви можете ознайомитися .

Додавання опису функції

У списку функцій, який виводиться Майстром, неможливо додати або редагувати їх опис. Список макросів дозволяє додавати процедур опис, але в ньому немає функцій. Проблема вирішується так:

  • Запустіть Майстер функцій, перегляньте, як відображається ім'я потрібної функціїта закрийте його.
  • Відкрийте і в полі «Ім'я макросу» впишіть ім'я функції користувача.
  • Натисніть кнопку «Параметри» і у вікні, додайте або відредагуйте опис.
  • Натисніть кнопку "OK", потім у вікні списку макросів - "Скасувати". Опис готовий!

Додавання опису на прикладі функції «Ділення»:

Опис функції «Поділ» у діалоговому вікні Майстри функцій «Аргументи функції»:


За допомогою вікна «Список макросів» можна додати опис самої функції, а її аргументи не можна. Але це можна зробити за допомогою методу Application.MacroOptions.

Метод Application.MacroOptions

Метод Application.MacroOptions дозволяє додати функції користувача опис, призначити поєднання клавіш, вказати категорію, додати описи аргументів і додати або змінити інші параметри. Давайте розглянемо можливості цього методу, які найчастіше використовуються.

Приклад коду з методом Application.MacroOptions:

Sub Ім'яПідпрограми() Application.MacroOptions _ Macro:="Ім'яФункції", _ Description:="Опис функції", _ Category:="Назва категорії", _ ArgumentDescriptions:=Array("Опис 1", "Опис 2", " Опис 3", ...) End Sub

  • Ім'яПідпрограми- будь-яке унікальне ім'я, яке підходить для найменування процедур.
  • Ім'яФункції- Ім'я функції, параметри якої додаються або змінюються.
  • Опис функції- Опис функції, яка додається або змінюється.
  • Назва категорії- назва категорії, в яку буде поміщена функція. Якщо параметр Category відсутній, функція користувача буде записана в розділ за замовчуванням - «Визначені користувачем». Якщо названа назва категорії відповідає одній з назв стандартного списку, функція буде записана до нього. Якщо такої Назви категорії немає у списку, буде створено новий розділ із цією назвою і функція буде поміщена до нього.
  • "Опис 1", "Опис 2", "Опис 3", ...- описи аргументів у тому порядку, як вони розташовані в оголошенні функції користувача.

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

Зараз за допомогою методу Application.MacroOptions спробуємо змінити опис функції «Ділення» і додати описи аргументів.

Sub ЗмінаОписи() Application.MacroOptions _ Macro:="Поділ", _ Description:="Опис функції Поділ змінено методом Application.MacroOptions", _ ArgumentDescriptions:=Array("- будь-яке числове значення", "- числове значення, крім нуля ") End Sub

Після одноразового запуску цієї підпрограми отримуємо наступний результат:


Метод Application.MacroOptions не працює в , але тут можна знайти рішення. Додайте описи до функцій користувача та їх аргументів у звичайній книзі Excel, потім експортуйте модуль з функціями в будь-який каталог на жорсткому диску і звідти імпортуйте в Особисту книгу макросів. Усі описи збережуться.