Функції для з необов’язковими аргументами

Деякі вбудовані функції дозволяють опускати певні аргументи Наприклад, у функції ПС (PV) необовязковими є аргументи тип і бс (Майбутня вартість), Excel все одно вирахує результат Цей підхід застосуємо і до ваших власних функціях

Припустимо, ви хочете створити просту користувача функцію з імям Трикутник, яка за теоремою Піфагора визначає довжину будь-якої сторони прямокутного трикутника на підставі відомих значень двох інших сторін Теорема Піфагора виражається рівнянням а2 + b2 = с2, де а і b є катетами, а з – Гіпотенузою Якщо відомі значення будь-яких двох змінних, то виходячи з даної рівності завжди можна визначити третю невідоме

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

Function TpeyronbHHK(Optional short1, Optional short2, _ Optional longside) If Not (IsMissing(short1))

And Not (IsMissing(short2)) Then

Трикутник = Sqr (short1 ^ 2 + short2 ^ 2) Else If Not (IsMissing (short1))

And Not (IsMissing(longside)) Then

Трикутник = Sqr (longside ^ 2 – short1 ^ 2)

Else

If Not  (IsMissing(short2))

And Not  (IsMissingClongside))  Then

Трикутник = Sqr (longside ^ 2 short2 ^ 2)

Else

End If End If End If

Трикутник = Необхідно поставити два аргументи”

End Function

Перша інструкція містить імя користувача функції і необовязкові аргументи shortl, short2 і longside Далі знаходиться ряд інструкцій If, в яких за допомогою вбудованої в VBA функції IsMissing зясовується, яка саме пара аргументів була задана Звідси впізнається, яка сторона вимагає обчислень Наприклад, така інструкція перевіряє наявність аргументів shortl і short2:

If Not   (IsMissing(short1))

And Not (IsMissing (short2)) Then Треугопьнік = Sqr (short1 ^ 2 + short2 ^ 2)

Функція IsMissing повертає значення True (істина), якщо аргумент не було наведено Відповідно, якщо заздалегідь відомі катети shortl і short2, Excel витягує квадратний корінь з суми квадратів їх сторін і повертає довжину гіпотенузи

Якщо задано менше двох аргументів, то жодна з інструкцій If не вертає значення True, і в цьому випадку виконується інструкція, присваивающая результату текстове значення:

Трикутник = Необхідно поставити два аргументи”

Тепер подивимося, як функція працює на практиці Формула = Трикутник ( 4 5)

поверне значення 3 – довжину відсутнього катета Відповідно формула

= Трикутник (3; 5) поверне значення 4 – довжину іншого відсутнього катета Нарешті, на виході останньої формули = Трикутник (3 4 ) ми побачимо число 5 – довжину гіпотенузи

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

У першої проблеми є просте рішення: відразу після інструкції Function ввести додатковий блок If .. End If:

If Not(IsMissing(short1)) And Not(IsMissing(sshort2)) And Not(IsMissing(longside)) Then

Triangle = Введіть рівно два аргументи” Exit Function

End If

Сюди ми включили інструкцію Exit Function, призначену для дострокового завершення функції У даному місці вона присутня для того, щоб не виконувати інструкції по виявленню відсутнього аргументу, після того як встановлено наявність всіх трьох

Подібні блоки інструкцій можна написати і для перевірки, чи є аргументи позитивними Для внесення більшої ясності щодо стандартного поведінки в блоки корисно помістити повідомлення про виявлені помилках Зверніть увагу, що за замовчуванням введення неприпустимих аргументів (наприклад, тексту замість чисел) викличе автоматичне завершення функції з видачею спеціальних вбудованих в Excel значень помилок Зокрема, при введенні тексту замість числа функція поверне значення # VALUE.

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

Доступ до призначених для користувача функціям

Користувацька функція працездатна тільки в тому випадку, коли відкрита робоча книга, що містить модуль, в якому знаходиться ця функція Якщо робоча книга не відкрито, при виклику функції Excel поверне помилку # ІМЯ. Більш того, якщо ви використовуєте функцію в іншій книзі, при зверненні до функції необхідно вказувати також імя робочої книги, в якій вона знаходиться Наприклад, при виклику функції Знижка, що зберігається в особистій книзі макросів Personalsxls, з іншої книги, ви повинні написати = personalxls Знижка (), а не просто = Знижка ()

Замість набору з клавіатури імен функцій (що нерідко призводить до помилок) ви можете вибирати користувача функції за допомогою Майстра функцій Діалогове вікно Майстра функцій відкривається командою Вставка ► Функція (Insert ► Function) У списку Категорія (Category) виберіть пункт Певні користувачем (User Defined) Після цього імена доступних користувальницьких функцій відобразяться в сусідньому списку

Найпростіший спосіб зробити користувача функції легкодоступними-включити їх в окрему робочу книгу і потім зберегти цю книгу як надбудову Excel ( XLA) у папці XLStart (Папка XLStart знаходиться там же, де і всі файли Excel При запуску Excel автоматично відкриваються всі збережені в ній документи) Для того щоб зберегти робочу книгу у вигляді файлу XLА, виберіть команду Файл ► Зберегти (File ► Save) і в списку Тип файлу (File Of Type) вкажіть тип Надбудова Microsoft Excel (Microsoft Excel Add-in)

Якщо для користувача функція знаходиться в XLA-файлі і він завантажений в оперативну память, при виклику функції ви не повинні додавати імя файлу

Джерело: Ефективна робота: Microsoft Office Excel 2003 / М Додж, К Стінсон – СПб: Питер, 2005 – 1088 с: ил

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*