Изучить основы VBA: типы данных, правила именования переменных, правила объявления переменных, базовые операторы, реализующие линейный алгоритм. Приобретение навыков написания пользовательских функций и процедур.
Постановка задания
Задание для всех вариантов звучит так (или, возможно, немного изменено, так как могут быть разные издания учебного пособия):
Согласно варианту задания, составьте алгоритм, решите задачу с помощью макроса и функции.
Варианты заданий
Лабораторная работа №2 предполагает создание блок-схемы, а затем написание программ (функции и макроса) на языке VBA for Excel. При заказе работы своего варианта вы получите аккуратную ГОСТовую блок-схему и качественно написанные и хорошо прокомментированные программы: функцию и макрос.
Образец выполнения (вариант №1)
Условие задания
$Y = frac<|a + x|^3> <ln|x + a|>+ 7 sqrt$ |
Алгоритм решения задачи
Прежде чем переходить непосредственно к кодированию данной лабораторной работы, нужно провести ее алгоритмизацию. Данный этап является обязательным и ни один профессиональный программист не опускает его в своей работе.
#02. Как написать функцию | VBA Excel
Если внимательно посмотреть на заданную аналитически функцию $Y$, то нетрудно заметить, что есть фрагменты, которые встречаются в записи формулы чаще $1$-го раза.
Как известно из курса школьной математики:
От перемены мест слагаемых сумма не меняется.
Следовательно, суммы $a + x$ и $x + a$ равносильны. То есть сумма $a + x$ встречается целых $3$ раза. Чтобы упростить вычисление заданной функции, введем вспомогательную переменную, отвечающую за эту сумму.
Источник: www.proglabs.ru
Создание функций пользователя средствами VBA
Продолжая выполнение лабораторной работы, создадим функции, которые реализуют вычисления функций на каждой из ветвей, а также функцию, реализующую вычисление F(x), средствами VBA. Рассмотрим последовательность действий, выполняемых при создании пользовательских функций и включения их в библиотеку функций программы Excel.
Для создания новой функции, включаемой в библиотеку функций программы Excel, следует:
1. В меню «Сервис» выбираем команду «Макрос ► » и далее выполняем команду «Редактор Visual Basic». Открывающееся при этом окно программы Microsoft Visual Basic показано на рис. 7.
Функции в VBA — (Серия VBA 19 — Часть 1: Теоретический базис)
![]() |
Рис. 7. Окно программы Microsoft Visual Basic
2. В окне программы Microsoft Visual Basic выбираем меню » Insert» (Вставка). В этом меню выбирается и выполняется команда Module (Модуль). В результате выполнения этой команды в проект рабочей книги включается папка «Modules» (Модули), в которой создается первый модуль — «Module1». рабочее которого открывается Под полем проекта (Project — VBAProject) поле редактора, в котором будут создаваться пользовательские функции и процедуры.
3. В меню » Insert» (Вставка) окна Microsoft Visual Basic выбираем команду » Procedure…» (Процедура). Открывается окно «Add Procedure» (Вставить процедуру).
![]() |
В поле Name (Имя) вводим имя создаваемой функции. Например, F1V. Очень важно, чтобы имя функции не совпадало с именем какой-либо ячейки на листе книги. (Имена ячеек принимают значения от А1 до IV65536). Нарушение этого условия приводит к появлению ошибок при выполнении процедур и функций.
4. В группе Type (Тип) выбираем переключатель, определяющий тип создаваемой процедуры. Тип Sub (Подпрограмма) может быть использован для создания процедур, выполняющих какие-либо действия и не передающих в основную программу числовые значения. Тип процедуры Function (Функция) используется для определения подпрограмм, результатом выполнения которых является одно числовое или логическое значение, передаваемое (возвращаемое) в основную программу через имя функции.
В рассматриваемом примере выбираем переключатель типа Function.
5. В поле Scope (Область действия) выбираем переключатель Public (Общедоступный), обеспечивая тем самым доступность функции пользователя из любых других книг.
6. После нажатия кнопки ОК в поле редактора вносятся две строки заготовки функции:
Public Function F1V()
7. Используя эту заготовку, допишем функцию пользователя для вычислений на первой ветке разветвляющейся функции.
Public Function F1V(x, a, b)
F1V = a + Exp(b * x)
End Function
8. Для проверки работоспособности созданной функции F1V, используя «Мастер функций «, запишем обращение к ней в ячейку С12. Для этого в окне первого шага «Мастера функций» в поле «Категория:» выбираем категорию «Определенные пользователем». Выбор функции F1V и нажатие кнопки ОК открывает ДО для определения параметров обращения. На рис. 9 показан результат определения ссылок в полях окна второго шага «Мастера функций»
![]() |
Следует обратить внимание на то, что ссылки на параметры А и В должны быть абсолютными. Этим обеспечивается возможность «протягивания» формулы для вычисления значений функции F1V в ячейках от С12 до С32.
9. Повторяя действия пунктов от 2 до 8, создаем функции F2V и F3V, реализующие соответственно функции для вычисления второй, третьей ветвей функции средствами алгоритмического языка Visual Basic. Ниже приведены тексты этих функций.
Public Function F2V(x, a, b)
Public Function F3V(x, a, b)
End Function
В записи выражений, реализующих функции F2V и F3V, следует обратить внимание на последовательность выполнения операций. Эта последовательность определяется приоритетами выполняемых операций и расстановкой круглых скобок.
Рассмотрим порядок выполнения операций по записи оператора для вычисления функции F2V
Первой выполняется операция умножения b на х. Второй выполняется операция сложения , в результате выполнения которой вычисляется значение числителя. Третьей операцией выполняется вычисление знаменателя (1 + х) и лишь после этого выполняется операция деления значения на (1 + х).
Неправильная расстановка скобок в записи выражений является наиболее часто встречающейся ошибкой.
10. Реализовав в модуле функции F1V, F2V, F3V и заполнив соответствующие столбцы таблицы, переходим к записи процедуры для вычисления значения разветвляющейся функции. Назовем эту функцию QRF. Блок-схема её алгоритма приведена на рис. 1.
Реализация этой функции на языке программирования Visual Basic (VB) отличается от формата формулы, использованной нами в реализации функции средствами программы Excel.
Public Function QRF(x, a, b, alfa, betta)
‘x — аргумент функции, a,b,alfa,betta — параметры
Else QRF = a / (b * x)
Для реализации логического условия «ЕСЛИ» в языке VB используется логический оператор
(Перевод слов: If — если, Then — тогда, Else — иначе).
Для записи операторов, в языке многострочных
Возможен другой вариант реализации разветвляющейся функции, в котором используются обращения к уже созданным ранее функциям F1V, F2V и F3V. Ниже приводится текст функции QRF1 с обращениями к этим функциям.
Public Function QRF1(x, a, b, alfa, betta)
‘x — аргумент функции, a,b,alfa,betta — параметры
Else QRF1 = F3V(x, a, b)
На рис. 10 приведён фрагмент таблицы, в которую включены столбцы F(X) — вычисление разветвляющейся функции средствами программы Excel, QRF(X) и QRF1(X) — вычисление разветвляющейся функции с использованием двух вариантов реализации разветвляющейся функции средствами языка программирования VB.
11. Сравнивая столбцы F(X), QRF(X) и QRF1(X) таблицы, мы видим их полную идентичность. В окончательном документе можно удалить два из этих трёх столбцов.
12. Перед построением графиков функций F1V, F2V, F3V и QRF1(X) обратим внимание на то, что в таблице значений функции F2V значение функции для аргумента Х = -1 равно 4,053Е+15. Это большое число получается из-за того, что знаменатель функции в этой точке становится равным 0.
Аналогичная особая точка имеется и в функции F3V при значении аргумента равном нулю. В таблице, приведенной на рис. 10, мы видим что при значении аргумента равном -2,8Е-16 в функции F3V имеет место выброс. Вид графиков, построенных по данным, приведенным в таблице рис. 10, показан на диаграмме рис.
11.
13. Исключить влияние особых точек можно, построив отдельно график разветвляющейся функции. Если же мы всё-таки хотим получить диаграмму, позволяющую выполнить наглядное сравнение функций, то можно «сгладить» выбросы в особых точках, заменив в этих точках значения функций F2V и F3V на максимальное или минимальное значение, достигаемые одной из табулируемых функций на интервале изменения аргумента.
14. Для определения максимального или минимального значений, достигаемых хотя бы одной из табулируемых функций, выполним следующие действия:
а) заменим значения функций в особых точках каким-либо числом, принадлежащим интервалу значений, определяемому таблицей. (В нашем примере можно ввести в соответствующие ячейки таблицы нули.)
б) Выделим все значения функций, входящие в таблицу. (В нашем случае это ячейки от В12 до Е32.)
в) Переведём УМ к полю автоматического вычисления итогов в строке состояния.
г) Для выбора функции автоматического подведения итогов выполним ЩПК и откроем контекстное меню с набором итоговых функций.
д) Выберем строку с названием функции «Минимум» è ЩЛК. Запишем минимальное числовое значение, отображаемое в поле итоговых формул строки состояния.
е) Повторим действия пункта «г)» и выберем функцию » Максимум «.
15. Запишем полученные нами минимальное и максимальное значения в соответствующие ячейки обнуленные нами ранее. Таким образом, мы получим таблицу, из которой будут убраны «особые» точки.
16. По этой таблице построим графики функций и выполним необходимые операции начального форматирования диаграммы.
17. Выполняем форматирование заголовка документа, таблицы и окончательное форматирование диаграммы.
Источник: poisk-ru.ru
Написание процедуры функции
Процедура Function — это ряд операторов Visual Basic, заключенных в инструкции Function и End Function . Процедура Function похожа на процедуру Sub , но функция также может возвращать значение.
Процедура Function может принимать аргументы, например константы, переменные или выражения, которые передаются ей вызывающим кодом. Если в процедуре Function нет аргументов, оператор Function содержит пустые скобки. Функция возвращает значение, присваивая его собственному имени в одном или нескольких операторах данной процедуры.
В следующем примере показано, как с помощью функции Celsius можно преобразовать градусы Фаренгейта в градусы Цельсия. Если функция вызывается из процедуры Main, переменная, которая содержит значение аргумента, передается функции. Результат вычислений отображается в вызывающем коде, который виден в окне сообщения.
Sub Main() temp = Application.InputBox(Prompt:= _ «Please enter the temperature in degrees F.», Type:=1) MsgBox «The temperature is » » degrees C.» End Sub Function Celsius(fDegrees) Celsius = (fDegrees — 32) * 5 / 9 End Function
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
Источник: learn.microsoft.com