Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

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 по тематическим разделам со ссылками на все статьи.