Найти тему
VBA Excel с нуля

VBA Excel № 69. Функция с необязательными аргументами в VBA.

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

Многие встроенные функции в Excel обладают гибкостью благодаря наличию необязательных аргументов. Рассмотрим это на примере функции ЛЕВСИМВ(), предназначенной для извлечения символов с левого края строки. Ее синтаксис следующий:

ЛЕВСИМВ(текст; [количество символов])

Первый аргумент, "текст", обязателен, в то время как второй аргумент, "количество символов", является необязательным. Если не указать второй аргумент, Excel автоматически предполагает, что он равен 1. Таким образом, формулы ниже приводят к идентичным результатам:

=ЛЕВСИМВ(A1; 1)

=ЛЕВСИМВ(A1)

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

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

Приведем пример функции USER, которая возвращает имя пользователя с возможностью изменения регистра:

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

Давайте попробуем разобрать функцию USER более подробно.

1. Объявление функции:

Function USER(Optional ВерхнийРегистр As Variant)

  • - Function: Ключевое слово, объявляющее начало функции.
  • - USER: Название функции.
  • - (Optional ВерхнийРегистр As Variant): Параметр функции.
  • - Optional: Ключевое слово, указывающее, что параметр не является обязательным.

- ВерхнийРегистр As Variant: Параметр, который может быть любого типа данных. В данном случае, он используется для указания, нужно ли возвращать имя пользователя в верхнем регистре.

2. Проверка наличия параметра:

If IsMissing(ВерхнийРегистр) Then ВерхнийРегистр = False

  • - IsMissing(ВерхнийРегистр): Встроенная функция, проверяющая, был ли передан параметр при вызове функции.
  • - Then ВерхнийРегистр = False: Если параметр отсутствует (не передан при вызове), то устанавливается значение по умолчанию, равное False.

3. Возврат имени пользователя:

  • USER = Application.UserName. Это свойство приложения Excel VBA, возвращающее имя текущего пользователя.

4. Изменение регистра:

If ВерхнийРегистр Then USER = UCase(USER)

  • - If ВерхнийРегистр Then: Условная конструкция, проверяющая значение параметра ВерхнийРегистр.
  • - USER = UCase(USER): Если ВерхнийРегистр равно True, то имя пользователя преобразуется в верхний регистр с помощью функции UCase.

Примеры использования функции USER:

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

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

Коротко о вышеуказанном. В данной функции ключевое слово Optional перед аргументом ВерхнийРегистр указывает на то, что этот аргумент необязательный. Если он не указан при вызове функции, он принимает значение по умолчанию - False. При передаче True в этот аргумент, функция возвращает имя пользователя в верхнем регистре.

Второй пример - функция ВЫБРАТЬ_1, которая случайным образом выбирает ячейку из заданного диапазона:

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

А теперь, давайте более подробно разберем функцию ВЫБРАТЬ_1.

1. Объявление функции:

Function ВЫБРАТЬ_1(Rng As Variant, Optional Пересчёт As Boolean = False)

  • - Function: Ключевое слово, которое объявляет начало функции.
  • - ВЫБРАТЬ_1: Название функции.
  • - (Rng As Variant, Optional Пересчёт As Boolean = False): Параметры функции, а именно:
  1. - Rng As Variant: Обязательный параметр. Он ожидает, что будет передан диапазон ячеек (или любой другой объект, который можно интерпретировать как диапазон).
  2. - Optional Пересчёт As Boolean = False: Необязательный параметр. Он имеет тип данных Boolean и по умолчанию равен False. Это означает, что, если пользователь не передает значение для этого параметра, оно будет автоматически установлено в False.

2. Application.Volatile:

  • Application.Volatile Пересчёт: Это метод приложения Excel VBA, который указывает, что функция должна быть пересчитана при каждом изменении в таблице данных. Пересчет функции будет происходить только в том случае, если Пересчёт равно True. Если Пересчёт равно False (или не указано явно), функция не будет пересчитываться, кроме случаев, когда изменяется одна из ячеек в диапазоне данных.

3. Определение случайной ячейки:

ВЫБРАТЬ_1 = Rng(Int((Rng.Count) Rnd + 1))

  • - ВЫБРАТЬ_1 = ...: Это присвоение значения функции. Результатом работы функции будет случайная ячейка из заданного диапазона.
  • - Rng.Count: Это свойство, возвращающее количество элементов в диапазоне Rng.
  • - Rnd: Встроенная функция, возвращающая случайное число от 0 до 1.
  • - Int(...): Округление вниз до ближайшего целого числа. В данном случае, используется для получения случайного индекса в пределах количества элементов в диапазоне.

- + 1: Добавление 1 к случайному индексу, так как индексы в VBA начинаются с 1.

Коротко о вышеуказанном. В этой функции ключевое слово Optional используется для аргумента Пересчёт, который по умолчанию равен False (или 0). Если Пересчёт установлен в True (или 1), функция будет пересчитываться при каждом изменении в таблице данных.

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