Многие встроенные функции в 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): Параметры функции, а именно:
- - Rng As Variant: Обязательный параметр. Он ожидает, что будет передан диапазон ячеек (или любой другой объект, который можно интерпретировать как диапазон).
- - 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), функция будет пересчитываться при каждом изменении в таблице данных.
Эта функция может быть полезной для выбора лотерейных номеров, победителя из списка имен и т.п.