Тема 3. VBA: Пользовательские функции

 

Visual Basic for Applications(в дальнейшем VBA) – является объектно-ориентированным языком программирования (ООЯП), позволяющим автоматизировать процесс решения многих экономических задач инструментальными средствами пакета MS Office. VBA в Excel - это сочетание одного из самых простых языков программирования и всех вычислительных возможностей Excel. Фирма Microsoft стремилась разработать простой язык программирования, который можно было бы использовать во всех приложениях этой фирмы. Требования к этому языку - минимальное время на его изучение, возможность разработки систем, объединяющих при работе несколько приложений. За основу был взят язык Basic. Теперь все приложения MS Office используют этот язык. VBA, относясь к ООЯП, применяет технологию визуального программирования. Основное отличие от обычных программ на Basic состоит в том, что наряду с обычными переменными и константами, эти программы манипулируют готовыми объектами приложений Microsoft Office, такими, например, как документы, абзацы, строки и слова Word; записи, поля, таблицы в Access; или рабочие книги, рабочие листы и диапазоны ячеек Excel. Чтобы создавать программный код на VBA, необходимо хорошо представлять себе функциональные возможности таких объектов, свойства, которыми они обладают и методы воздействия на них.

Основной программный код располагается в функциях и процедурах. Процедуры будут рассмотрены позднее, здесь же остановимся на функциях.

Функции, как стандартные (встроенные), так и пользовательские (созданные пользователем для своих нужд), в большей части предназначены для выполнения расчетов, анализа и преобразования данных. Они всегда возвращают результат, могут иметь аргументы (параметры), т.е. исходные данные, необходимые для получения результата. Пользовательские функции имеют некоторые ограничения: в них нельзя применять методы и изменять свойства объектов. Нежелательно также использование команд ввода-вывода данных. Вызов функции можно использовать на рабочем листе, обращаться к ней по имени из других функций и процедур.

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

 

Function имя ([аргумент as тип, аргумент as тип [,…]]) [as тип]

[инструкции]

имя = выражение

[Еxit Function]

End Function

 

Для создания пользовательской функции требуется активизировать редактор VBA (Alt + F11), активизировать окно проекта при его отсутствии (View / Project Explorer) и добавить в проект Модуль (Insert / Module).

Обращение к функции осуществляется с помощью Мастера функций (пиктограмма fx) из категории пользовательских функций.

Рис.5. Код функции

Индивидуальное задание № 3. Создать пользовательскую функцию для расчета НДФЛ, используя в качестве дополнительных аргументов данные табл. 3.

 

Таблица 3. Дополнительные аргументы функции НДФЛ

N Дополнительные параметры
доход, свыше которого налоговый вычет не предоставляется
налоговый вычет на первого и второго ребенка и налоговый вычет на третьего и каждого последующего ребенка
процент налога и доход, свыше которого налоговый вычет не предоставляется
налоговый вычет на первого и второго ребенка
налоговый вычет на третьего и каждого последующего ребенка
процент налога
доход, свыше которого налоговый вычет не предоставляется и налоговый вычет на первого и второго ребенка
доход, свыше которого налоговый вычет не предоставляется и налоговый вычет на третьего и каждого последующего ребенка
процент налога и налоговый вычет на первого и второго ребенка
процент налога и налоговый вычет на третьего и каждого последующего ребенка

Рассмотрим примеры пользовательских функций по обработке символьных выражений.

Пример 2. Определить, является ли символьное выражение палиндромом (палиндром – выражение, читаемое слева направо и справа налево одинаково). Данная задача будет решена несколькими способами.

Пример 3. Определить, имеется ли баланс открывающихся и закрывающихся круглых скобок в символьном выражении. Например, в выражении "1*(2+3)" баланс есть, в выражениях "1*((2+3)" и "1*)(2+3" баланса нет.

При решении использовались стандартные функции VBA. Их описание приведено в приложении 1.

Индивидуальное задание 4.Требуется добавить новое поле в БД на листе «Сотрудники». Ввод данных в новое поле необходимо осуществить с помощью самостоятельно созданной пользовательской функции. Номер варианта задания из табл. 4 назначается преподавателем.

 

 

Таблица 4. Варианты заданий

N Индивидуальное задание
Сформировать фамилию без инициалов, например Иванов А.П à Иванов
Поставить точки в инициалах ИО, например Иванов АП à Иванов А.П.
Поставить пробел после фамилии, например ИвановАП à Иванов АП
Сформировать аббревиатуру ФИО, например Иванов А.П. à ИАП
Сформировать название отдела без пробелов, например О К à ОК
Проверить, имеется ли в поле ФИО запятая, например Иванов А,П. à есть, Иванов А.П. à нет
В поле ФИО инициалы преобразовать в заглавные символы, например Иванов и.п. à Иванов И.П.
Определить, есть ли в поле ФИО лишние пробелы, например Иванов А.П. à нет, Иванов А. П. à есть
Определить количество заглавных букв в названии отдела, например, отдел кадров à 0, Отдел Маркетинга à 2
Определить, все ли буквы в поле Должность строчные, например, Директор à нет, дворник à да
Определить, четное или нечетное количество символов в поле Должность
Определить, начинается ли поле ФИО следующего сотрудника за интересующим сотрудником с той же буквы, например Иванов А.П и Петров М.О à нет, Иванов А.П и Ивкин М.О à да
Определить, совпадают ли первый и последний символы в поле Должность без учета регистра, например Ректор à да, инженер à нет
Определить, сколько букв по порядку с начала совпадают у полей Отдел и Должность без учета регистра, например Бухгалтерия и бухгалтер à 9, Маркетинга и маркетолог à6
Сформировать наименование должности с пробелами между букв, например дворник à д в о р н и к
Определить, является ли фамилия двойной, например Мамин-Сибиряк Д.Н. à да, Иванов А.П. à нет
Если фамилия является двойной, преобразовать первые буквы первой и второй фамилии в заглавные, например мамин-сибиряк Д.Н. à Мамин-Сибиряк Д.Н.
Определить количество согласных букв в поле Должность, например дворник à 5
Сформировать наименование должности с заглавными гласными буквами, например охранник à ОхрАннИк
Определить процент гласных букв в поле Должность, например агент à40%