Найти в Дзене
VBA Excel с нуля

VBA Excel № 60. Функции в VBA.

Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Функция в языке программирования VBA представляет собой важную процедуру, которая выполняет вычисления и возвращает результат. Функции можно успешно применять как в коде VBA, так и в формулах. В VBA вы можете создавать два основных типа процедур: Sub и Function. Подходя к Sub можно сравнить с выполнением команды, которая активизируется либо пользователем, либо другой процедурой. С другой стороны, Function, как правило, возвращает конкретное значение или массив, подобно встроенным функциям Excel и встроенным функциям VBA. Как и встроенные функции, функции типа Function также могут принимать аргументы.

Эти функции типа Function могут использоваться в двух основных контекстах:

  1. Внутри выражений в коде VBA.
  2. В ячейках формул на рабочем листе.

Преимущество заключается в том, что функции типа Function могут применяться практически повсеместно, где используются функции Excel и встроенные функции VBA. Единственным исключением является невозможность использования функций VBA в формулах для проверки данных. Однако пользовательскую функцию VBA можно использовать в формуле, реализующей условное форматирование.

Назначение пользовательских функций:

Функции Excel известны практически каждому пользователю, даже новичкам, и включают в себя популярные функции, такие как SUM(), IF(). В Excel доступно более 450 встроенных функций. Но иногда возникает необходимость создавать собственные пользовательские функции с использованием VBA.

Кстати можно задать вопрос: зачем создавать новые функции, имея такое множество готовых? Ответ кроется в упрощении рабочего процесса. Тщательно спроектированные пользовательские функции могут значительно упростить работу, особенно при работе с формулами на рабочем листе и в процедурах VBA.

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

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

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

Пример функции

Эта функция называется "УБРАТЬ_ГЛАСНЫЕ" и просто удаляет гласные буквы из переданного текста и возвращает результат. Функция ДЕМОНСТРИРУЕТ (сама по себе не самая полезная функция), как пользовательские функции могут быть созданы и использованы для определенных задач, что делает их полезными инструментами для обработки данных в Excel.

  1. Function УБРАТЬ_ГЛАСНЫЕ(Txt) As String
  2. ' Удаляет все гласные из текстового аргумента
  3. Dim i As Long
  4. УБРАТЬ_ГЛАСНЫЕ= ""
  5. For i = 1 To Len(Txt)
  6. If Not UCase(Mid(Txt, i, 1)) Like "[AEIOUAEEИОУЫЭЮЯ]" Then
  7. УБРАТЬ_ГЛАСНЫЕ= УБРАТЬ_ГЛАСНЫЕ & Mid(Txt, i, 1)
  8. End If
  9. Next i
  10. End Function
Скриншот с моего ноутбука
Скриншот с моего ноутбука

📌 Скачать файл пример, можно в конце статьи.

Анализ пользовательской функции

  • Function УБРАТЬ_ГЛАСНЫЕ(Txt) As String: Это объявление функции. Она принимает один аргумент Txt, который должен быть текстового типа (As String). Эта функция будет возвращать строку.
  • Комментарий ' Удаляет все гласные из текстового аргумента поясняет, что делает эта функция. Комментарии - это полезная практика для документации кода и делают код более читаемым.
  • Dim i As Long: Это объявление переменной i, которая будет использоваться для итерации через символы в тексте. Она имеет тип данных Long, который предназначен для хранения целых чисел.
  • УБРАТЬ_ГЛАСНЫЕ= "": Инициализирует переменную УБРАТЬ_ГЛАСНЫЕ пустой строкой. Эта переменная будет использоваться для накопления символов, из которых будут удалены гласные.
  • Затем идет цикл For, который перебирает каждый символ в переданном тексте (Txt).
  • If Not UCase(Mid(Txt, i, 1)) Like "[AEIOUAEENOЫЭЮЯ]" Then: Это условное выражение проверяет, является ли текущий символ гласной. Функция UCase используется для преобразования символа в верхний регистр, чтобы обеспечить независимость от регистра. Like позволяет определить, соответствует ли символ любой из указанных гласных букв. Если символ не является гласной, он добавляется к переменной УБРАТЬ_ГЛАСНЫЕ.
  • УБРАТЬ_ГЛАСНЫЕ= УБРАТЬ_ГЛАСНЫЕ& Mid(Txt, i, 1): Эта строка добавляет текущий символ к переменной УБРАТЬ_ГЛАСНЫЕ, если он не является гласной.
  • Код функции завершается оператором End Function.
Важное замечание: Чтобы пользовательские функции, созданные в VBA, работали в формулах на рабочем листе, они должны быть размещены в обычном модуле VBA, а не в модуле листа, пользовательской формы или книги. Используйте команду "Insert => Module" (Вставка => Модуль), чтобы создать обычный модуль VBA для размещения вашей функции. Если функция находится в неправильном месте, она не будет выполняться в формулах и отобразит ошибку #ИМЯ?.

Использование функции на рабочем листе:

При использовании функции УБРАТЬ_ГЛАСНЫЕ в формуле на рабочем листе, Excel выполняет программу для получения конечного значения. Например, формула =УБРАТЬ_ГЛАСНЫЕ(A1) удалит все гласные буквы из текста, находящегося в ячейке A1. Функция действует подобно встроенным функциям Excel и может быть вставлена в формулу с использованием команды "Формулы" -> "Библиотека функций" -> "Вставить функцию" или кнопки мастера функций в левой части строки формул. Пользовательские функции обычно находятся в категории "Определенные пользователем".

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Вы также можете создавать вложенные пользовательские функции, комбинируя функцию УБРАТЬ_ГЛАСНЫЕ с другими встроенными функциями Excel. Например, формула =ПРОПИСH(УБРАТЬ_ГЛАСНЫЕ(A1)) превратит исходную строку в текст верхнего регистра без гласных.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Использование функции в процедуре VBA:

Пользовательские функции можно применять не только в формулах рабочего листа, но и в процедурах VBA. Следующая процедура, определенная в том же модуле, что и пользовательская функция УБРАТЬ_ГЛАСНЫЕ, сначала отображает окно для ввода текста пользователем. Затем процедура применяет встроенную функцию VBA MsgBox для отображения данных, введенных пользователем, но уже после их обработки функцией УБРАТЬ_ГЛАСНЫЕ.

  1. Sub Вычеркнуть_гласные()
  2. Dim UserInput As String
  3. UserInput = InputBox("Введите текст: ")
  4. MsgBox УБРАТЬ_ГЛАСНЫЕ(UserInput), vbInformation, UserInput
  5. End Sub
Скриншот с моего ноутбука
Скриншот с моего ноутбука

На практике, когда пользователь вводит строку, функция УБРАТЬ_ГЛАСНЫЕ удаляет гласные буквы из текста, и затем эта обработанная строка выводится в диалоговом окне MsgBox. Например, если я введу строку "Заслушался, мадам, как вы молчите", то MsgBox покажет "Зслшлс, мдм, кк в млч " без гласных букв.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Эти примеры демонстрируют, как пользовательские функции могут быть использованы как на рабочем листе Excel, так и в процедурах VBA для обработки данных и упрощения задач обработки текста.

✔СКАЧАТЬ ФАЙЛ ПРИМЕР можно через мой одноимённый телеграмм канал по ссылке.

Наука
7 млн интересуются