Пример создания простейшей функции на VBA Excel для начинающих программировать с нуля. Вставка пользовательской функции на рабочий лист с помощью мастера.
Начинаем программировать с нуля
Часть 2. Первая функция
[Часть 1] [Часть 2] [Часть 3] [Часть 4]
Вводная информация
Функция (Function) отличается от подпрограммы (Sub) тем, что она всегда возвращает какое-либо значение. Если функция размещается в ячейке рабочего листа, то в этой ячейке мы видим значение, которое функция возвратила.
В качестве примера мы создадим функцию, вычисляющую объем цилиндра по формуле: V=π*D²/4*H, где
- V – объем цилиндра;
- π – число Pi;
- D – диаметр основания цилиндра;
- H – высота цилиндра.
Первая функция на VBA Excel
Создайте или откройте файл Excel с расширением .xlsm (Книга Excel с поддержкой макросов). В версиях Excel по 2003 год – с расширением .xls.
Перейдите в редактор VBA, нажав сочетание клавиш «Левая_клавиша_Alt+F11».
Если вы не создавали ранее в этом проекте VBA стандартный программный модуль, нажмите кнопку «Module» во вкладке «Insert» главного меню. То же подменю откроется при нажатии на вторую кнопку после значка Excel на панели инструментов.
Ссылка на модуль появится в проводнике слева. Если модуль создан ранее, дважды кликните по его ссылке в проводнике, и он откроется справа для редактирования.
Нажмите кнопку «Procedure…» во вкладке «Insert» главного меню. Та же ссылка будет доступна при нажатии на вторую кнопку после значка Excel на панели инструментов.
В открывшемся окне добавления шаблона процедуры выберите «Function», вставьте в поле «Name» название функции «ObyemTsilindra» и нажмите «OK».
Шаблон функции добавится на лист модуля.
Вставьте в скобки через запятую аргументы функции (D, H), а внутрь шаблона следующую строку:
1 |
ObyemTsilindra = WorksheetFunction.Pi * D ^ 2 / 4 * H |
В этой строке, функции (слева) присваивается значение, вычисленное в выражении справа. Выражение повторяет нашу первоначальную формулу вычисления объема цилиндра, где «WorksheetFunction.Pi» – это функция рабочего листа, возвращающая число Pi.
Функция, вычисляющая объем цилиндра по диаметру основания и высоте готова.
Вставка функции в ячейку
Вставить пользовательскую функцию в ячейку можно как вручную: =ObyemTsilindra(Ячейка1;Ячейка2)
, так и с помощью мастера функций.
Выберите ячейку, в которую вы хотите вставить формулу, и вызовите матер функций.
В открывшемся окне «Вставка функции» выберите категорию «Определенные пользователем», а в открывшемся списке – функцию «ObyemTsilindra» и нажмите «OK».
В окне «Аргументы функции» в полях аргументов выберите соответствующие ячейки, кликнув по ним на рабочем листе, и нажмите «OK».
Обращаться с пользовательской функцией на рабочем листе можно так же, как с любой другой формулой, например, копировать протягиванием.
Примеры других функций
Площадь круга
Формула: S=π*r²
Код функции:
1 2 3 |
Public Function S_Kruga(r) S_Kruga = WorksheetFunction.Pi * r ^ 2 End Function |
Результат:
Площадь треугольника
Формула: S=a*h/2
Код функции:
1 2 3 |
Public Function S_Treugolnika(a, h) S_Treugolnika = a * h / 2 End Function |
Результат:
В мастере функций отсутствует категория «Определенные пользователем». Почему?
Уточняю ситуацию с вопросом. Функцию я создал в Листе1. Когда я скопировал ее в модуль, она появилась в списке функций Экселя. Процедуры и функции можно создавать как в модуле, так и непосредственно в книгах. В чем разница?
Добрый день, Борис!
Функции, записанные в модулях листов и книг, доступны только для использования их в других процедурах. Применение их в качестве формул в ячейках рабочего листа не предусмотрено. При вводе такой формулы вручную будет возвращена ошибка:
#ИМЯ?
По идее так может быть, если вы еще не создавали функцию
Здравствуйте.
А в чем смысл такого сложного вычисления, если можно просто в С2 написать форулу?
Здравствуйте, Анна!
Смысл этой статьи заключается в том, чтобы на простом примере объяснить, как создавать и применять пользовательские функции. Это знание поможет, в дальнейшем, создавать собственные функции, которые будут заменять очень сложные формулы.
Здравствуйте. Мне непонятно одно процедура «Function», откуда возвращает? До этого куда пошла?
А процедура «Sub» откуда не возвращает?
Добрый день, Мубинджон!
Функция производит какие-то вычисления и/или другие операции и возвращает их результат в ячейку, в которой она записана.
Так же работают и встроенные функции VBA Excel, например, функция Sqr(25) возвращает квадратный корень, извлеченный из 25.
То есть смысл «возвращения» не в том, что функция куда-то пошла и потом вернулась, а в том, что мы ей дали какие-то аргументы (например, 25 для Sqr), а она нам возвратила результат вычислений и/или других операций. К другим операциям можно отнести работу с текстом.
Процедура может ничего не возвращать, например:
Эта процедура копирует активный лист в новую книгу Excel.
Неполный урок, не все шаги показано. Например надо писать на ячейках диаметр, высоты цилиндра и на какую ячейку надо поставить эту непонятно логически возвращающую функцию.
Мубинджон, эта функция работает так же, как и любая встроенная функция рабочего листа, например
=СУММ()
.Вставьте в любую ячейку формулу
=ObyemTsilindra(5;12)
. Вы сразу увидите результат вычисления. Числа 5 и 12 вы можете заменить на ссылки на ячейки.Добрый день!
На Вашем примере все просто и работает, пытаюсь тоже самое проделать на других формулах и не получается. Площадь круга, треугольника и т.д. Можно еще несколько примеров привести, что бы был понятен простой вроде алгоритм. 🙂
Здравствуйте, Игорь!
Добавил примеры с площадями круга и треугольника.
А у меня не работает функция, возвращается значение 0. С чем это может быть связано?
Разобрался. Имя функции присвоил с ошибкой, а строку скопировал из примера, конфликт имён случился
Как удачно я нашёл ваш канал!)) Всё просто и понятно.
Обсуждение закрыто.