VBA Excel. Функция для вычисления факториала

Вычисление факториала натуральных (неотрицательных целых) чисел с помощью пользовательской функции Factorial. Ограничение для VBA Excel по типу данных.

Факториал и его вычисление

Факториал – это функция, определяемая для натурального числа n как произведение всех неотрицательных целых чисел от 1 до n включительно.

Формула, по которой вычисляется факториал, записывается следующим образом:

n! = 1 · 2 · ... · n

Пример: 3! = 1 · 2 · 3 = 6

В соответствии с формулой факториала, будет верным следующее соотношение:

(n-1)! = n! : n

Если принять для этого равенства n = 1, тогда получим:

0! = 1

Пользовательская функция Factorial

Для вычисления факториала натуральных чисел можно использовать следующую пользовательскую функцию:

Первое условие функции Factorial (If Not IsNumeric(n) Or n = Empty) проверяет, не является ли значение ячейки не числом. Второе условие (ElseIf n < 0) проверяет, не является ли число в ячейке отрицательным.

Если значение ячейки окажется не числом или числом отрицательным, функция возвратит соответствующее сообщение и завершит работу (Exit Function).

Далее, если функция Factorial не завершила работу, переменной p присваивается значение 1, которое возвратит функция, если значение переменной n будет равно нулю или единице.

Значение ячейки (переменная n) округляется до целого и, если оно окажется больше единицы, вычисляется факториал с помощью цикла For… Next.

Пользовательская функция Factorial возвратит значение, присвоенное ей из переменной p.

Рекурсивная функция Factorial

Рекурсивной называется функция, которая вызывает сама себя.

Рекурсивная функция, вычисляющая факториал:

Как она работает, я не понимаю, но она работает!

Ограничение по типу данных

Максимальное значение пользовательской функции Factorial для ячеек с общим форматированием будет ограничено максимальным значением типа данных Double (1,79769313486232Е+308).

Максимально возможное значение будет превышено при вычислении факториала при n > 170. В этом случае, в ячейку с функцией Factorial, Excel возвратит сообщение об ошибке: #ЗНАЧ!.

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

Попробуйте задать ячейке с функцией Factorial числовой тип без дробных значений. У меня в Excel 2016 x64 факториал от 146 отображается из 15 значащих цифр впереди и огромного количества нулей справа. Чтобы это увидеть, надо ячейку растянуть на всю ширину и уменьшить размер шрифта в ней. Значение факториала от 147 в ячейке с числовым форматом уже не отображается.

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Добавить комментарий

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