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

VBA Excel № 71. Функция, возвращающая значение ошибки.

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

В некоторых сценариях требуется, чтобы пользовательская функция возвращала значение ошибки. Давайте рассмотрим функцию "УБРАТЬ_ГЛАСНЫЕ," которая была представлена ранее в статье №60. Вот её код:

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

При использовании этой функции в составе формулы на листе Excel, она удаляет гласные буквы из текстового аргумента, находящегося в одной ячейке. Если аргумент является числовым значением, оно возвращается в виде СТРОКИ. В таком случае предпочтительнее вернуть сообщение об ошибке (#Н/Д).

Казалось бы, логичным решением было бы создать строку, которая выглядит как значение ошибки в формуле Excel:

УБРАТЬ_ГЛАСНЫЕ = "#Н/Д"

Однако, несмотря на то, что эта строка выглядит как значение ошибки, она не обрабатывается как ошибка другими формулами, которые могут на неё ссылаться. Чтобы получить в результате выполнения функции настоящее значение ошибки, давайте используем функцию CVErr, которая преобразует номер ошибки в настоящую ошибку.

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

  1. xlErrDiv0 (для ошибки #ДЕЛ/0!);
  2. xlErrNA (для ошибки #H/Д);
  3. xlErrName (для ошибки #ИМЯ?);
  4. xlErrNull (для ошибки #ПУСТО!);
  5. xlErrNum (для ошибки #ЧИСЛО!);
  6. xlErrRef (для ошибки #ССЫЛКА!);
  7. xlErrValue (для ошибки #ЗНАЧ!).
В конце статьи разберём каждую константу.

Чтобы получить ошибку #Н/Д в пользовательской функции, используйте следующий оператор:

УБРАТЬ_ГЛАСНЫЕ = CVErr(xlErrNA)

Ниже приведён новый (изменённый) код функции УБРАТЬ_ГЛАСНЫЕ. В этой версии добавлен блок условия If Then, который выполняет альтернативное действие в случае, если аргумент не является текстовой строкой. Функция вызывает встроенную функцию Excel ЕТЕКСТ(), чтобы определить, содержит ли ячейка текст. Если ячейка содержит текст, функция возвращает нормальный результат. В противном случае возвращается ошибка #Н/Д.

Обратите внимание, что мы изменили тип данных для возвращаемого значением функции. Поскольку функция может возвращать что-то, кроме строки, тип данных был изменён на Variant.

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

А теперь, давайте разберем этот код построчно:

  1. Function УБРАТЬ_ГЛАСНЫЕ(Txt) As Variant - Определяет начало функции с именем УБРАТЬ_ГЛАСНЫЕ и параметром Txt. Функция возвращает значение типа Variant, что означает, что она может возвращать различные типы данных, включая строки, числа и ошибки.
  2. Dim i As Long - Объявляет переменную i типа Long, которая будет использоваться в цикле для итерации по символам в строке.
  3. УБРАТЬ_ГЛАСНЫЕ = "" - Инициализирует переменную УБРАТЬ_ГЛАСНЫЕ пустой строкой. Эта переменная будет использоваться для накопления символов без гласных.
  4. For i= 1 To Len(Txt) - Начинает цикл, который будет выполняться для каждого символа в строке Txt. Len(Txt) возвращает длину строки.
  5. If Not UCase(Mid(Txt, i, 1)) Like "[AEIOUАЕЁИОУЫЭЮЯ]" Then - Проверяет, если текущий символ не является гласной. Mid(Txt, i, 1) возвращает i-й символ из строки Txt, UCase преобразует его в верхний регистр, и Like проверяет, соответствует ли символ шаблону гласных.
  6. УБРАТЬ_ГЛАСНЫЕ = УБРАТЬ_ГЛАСНЫЕ & Mid(Txt, i, 1) - Если текущий символ не является гласной, добавляет его к переменной УБРАТЬ_ГЛАСНЫЕ. Это создает новую строку, содержащую только согласные символы.
  7. Next i - Завершает цикл, переходя к следующему символу в строке.
  8. End Function - Завершает определение функции.
Таким образом, функция УБРАТЬ_ГЛАСНЫЕ принимает текстовый аргумент и возвращает новую строку, содержащую те же символы, что и в исходной строке, за исключением гласных. Если аргумент НЕ ЯВЛЯЕТСЯ строкой, функция возвращает ошибку #Н/Д.

Например:

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

Разбор констант:

  • xlErrDiv0 (для ошибки #ДЕЛ/0!);
Эта константа связана с ошибкой деления на ноль. В формулах Excel она отображается как #ДЕЛ/0!, что указывает на попытку деления на ноль.

  • xlErrNA (для ошибки #H/Д);
Константа xlErrNA связана с ошибкой недоступности данных (#H/Д), которая возникает, когда Excel не может получить доступ к необходимым данным.

  • xlErrName (для ошибки #ИМЯ?);
Эта константа связана с ошибкой отсутствия идентификатора (#ИМЯ?), которая возникает, когда используется недопустимое имя.

  • xlErrNull (для ошибки #ПУСТО!);
Константа xlErrNull связана с ошибкой нулевого значения (#ПУСТО!). Эта ошибка возникает, когда формула пытается использовать значение, которое является Null (пустым).

  • xlErrNum (для ошибки #ЧИСЛО!);
Эта константа связана с ошибкой недопустимого числа (#ЧИСЛО!). Она возникает, когда формула ожидает числовое значение, но получает что-то другое.

  • xlErrRef (для ошибки #ССЫЛКА!);
Константа xlErrRef связана с ошибкой недопустимой ссылки (#ССЫЛКА!). Эта ошибка возникает, когда формула ссылается на недопустимую ячейку или диапазон ячеек.

  • xlErrValue (для ошибки #ЗНАЧ!);
Эта константа связана с ошибкой недопустимого значения (#ЗНАЧ!). Она возникает, когда формула ожидает определенный тип значения, но получает что-то другое.

В общем эти строки представляют собой встроенные константы ошибок в VBA, используемом в Excel. Каждая из них связана с определенным типом ошибки, который может возникнуть при выполнении формул в Excel.

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