不使用VBA及内置阶乘函数时如何在Excel中实现阶乘计算
Excel无VBA、无内置阶乘函数的阶乘计算方案
原有迭代方案的问题修正
你之前的公式无法生效的核心原因是把迭代计数逻辑、阶乘乘积逻辑合并在单个单元格内,没有给迭代变量D5设置正确的自增循环引用规则,按以下步骤调整即可正常使用(需保持迭代计算功能开启,建议将最大迭代次数设置为你需要计算的最大阶乘值,比如计算10!就设为10次):
- 单元格定义:
- C5:待求阶乘的输入单元格,要求输入≥1的正整数
- D5:迭代计数变量,初始值手动输入1
- E5:阶乘结果输出单元格,初始值手动输入1
- D5单元格输入迭代计数公式:
=IF(OR(C5<1;D5>=C5);C5;D5+1) - E5单元格输入阶乘计算公式:
=IF(C5<1;"Wrong number!!!";IF(D5<=C5;IF(D5=1;1;E5*D5);E5))
注意:该方案依赖迭代设置,如果迭代次数配置错误会出现计算结果偏差,更推荐使用下面的无迭代方案。
无需开启迭代的稳定实现方案
该方案不需要额外配置迭代参数,不需要单独的迭代变量单元格,全程不使用VBA、不调用FACT()内置阶乘函数,直接在结果单元格输入公式即可:
- 适用于Excel 2019及更早版本(无动态数组支持):输入公式后按
Ctrl+Shift+Enter三键确认数组公式
=IF(C5<1;"Wrong number!!!";PRODUCT(ROW(INDIRECT("1:"&C5))))
- 适用于Excel 365/2021及以后版本(支持动态数组):直接输入按回车即可
=IF(C5<1;"Wrong number!!!";PRODUCT(SEQUENCE(C5)))
公式逻辑说明:
- 第一层IF判断先校验输入值,小于1时直接返回错误提示
- 旧版本用
ROW(INDIRECT("1:"&C5))、新版本用SEQUENCE(C5)生成从1到输入值C5的连续整数序列 - 用
PRODUCT()对序列内所有数值做连乘,直接得到阶乘结果,逻辑完全符合阶乘数学定义。
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

