По умолчанию, ОДС ( ссылка: / VBA-примеры-определяемые пользователем функция [Определенные пользователем функции]) в Excel VBA не летучий. Они пересчитываются только тогда, когда какой-либо из аргументов функции меняются. Летучая функция будет пересчитана всякий раз, когда расчет происходит в любых ячейках на листе. Давайте посмотрим на простой пример, чтобы объяснить это немного больше.

  1. Откройте редактор Visual Basic и выберите Вставка, модуль.

Создайте функцию под названием MYFUNCTION, которая возвращает сумму выбранной ячейки и ячейки ниже этой ячейки.

  1. Добавьте следующие строки кода:

Function MYFUNCTION(cell As Range)

MYFUNCTION = cell.Value + cell.Offset(1, 0).Value

End Function
  1. Теперь вы можете использовать эту функцию, так же как и любой другой функции Excel.

Non-volatile Function in Excel VBA

  1. Это энергонезависимая функция. Энергонезависимые функции только пересчитываются при любом изменении аргументов функции. Измените значение ячейки B2 до 8.

Function’s Argument Changes

  1. Теперь измените значение ячейки В3 до 11.

Any Other Cell Changes

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

  1. Обновление функции следующим образом, чтобы функция летучей:

Function MYFUNCTION(cell As Range)

Application.Volatile

MYFUNCTION = cell.Value + cell.Offset(1, 0).Value

End Function
  1. Изменение значение ячейки B3 до 12.

Результат:

Volatile Function in Excel VBA

Примечание: вам нужно ввести функцию снова, чтобы сделать его летучим (или обновить его, поместив курсор в строке формул и нажать ввод).