使用LET嵌套MAKEARRAY生成累积值返回#VALUE!的原因及优化方案
问题解答
一、LET嵌套公式报错原因
当你用LET将F5:J5赋值给ps后,ps会被Excel识别为内存数组,而非原有的单元格区域引用。原公式中INDEX(F5:J5,1,1):INDEX(F5:J5,1,c)是合法的单元格区域引用,但针对内存数组ps时,INDEX(ps,1,1):INDEX(ps,1,c)试图用冒号连接两个独立的数组元素,这不是Excel支持的有效引用格式,SUM函数无法处理这种错误输入,因此返回#VALUE!。
二、更优的累积值生成公式
1. 最基础的非动态方法(无需函数嵌套)
在目标区域的第一个单元格输入:
=SUM($F5:F5)
然后向右拖动填充柄,即可生成对应位置的累积值。这种方法简单直观,兼容性最好,适合所有Excel版本。
2. 动态数组公式(无需LAMBDA,一次输入生成全列表)
输入以下公式后按回车,Excel会自动溢出生成与原数据方向一致的累积值列表:
=TRANSPOSE(MMULT(--(SEQUENCE(COLUMNS(F5:J5))<=TRANSPOSE(SEQUENCE(COLUMNS(F5:J5)))),TRANSPOSE(F5:J5)))
原理说明:
SEQUENCE(COLUMNS(F5:J5))生成与原数据列数匹配的序列(如1到5)--(序列<=转置序列)生成下三角矩阵(对角线及下方为1,上方为0)- 矩阵与转置后的原数据相乘,再转置回水平方向,得到最终累积和
3. 简洁替代方案(支持LAMBDA时使用)
如果你的Excel版本支持LAMBDA函数,SCAN是更高效的选择:
=SCAN(0,F5:J5,LAMBDA(a,b,a+b))
公式从0开始,依次累加原数组的每个元素,直接生成水平方向的累积值列表。
内容的提问来源于stack exchange,提问作者SoftTimur
相关产品推荐
相关产品推荐

