如何用单行公式实现48个月偏移收入数组的求和运算?
单行公式解决方案
可以借助LET、SEQUENCE和MMULT函数构建权重矩阵,一次性完成所有计算,无需拆分48行:
=LET( revenue, $E23:$E70, // 替换为你的48个月收入曲线所在单元格范围 customers, E$37:E$84, // 替换为你的48个月客户数所在单元格范围 row_nums, SEQUENCE(ROWS(revenue)), col_nums, SEQUENCE(,COLUMNS(revenue)), weight_matrix, MAX(col_nums - row_nums + 1, 0), SUMPRODUCT(customers, MMULT(weight_matrix, TRANSPOSE(revenue))) )
公式解释
LET:定义变量简化公式结构,避免重复引用单元格row_nums/col_nums:生成1到48的行号、列号数组,用于构建权重矩阵weight_matrix:生成48×48的下三角权重矩阵,第i行第j列的值为j-i+1(当j≥i时),否则为0,完全匹配你需要的偏移乘数规则MMULT(weight_matrix, TRANSPOSE(revenue)):计算每个月份客户对应的收入加权总和(将收入数组转为列向量后与权重矩阵相乘)SUMPRODUCT:将每个月份的客户数与对应的加权收入相乘,最终求和得到总结果
替代方案(兼容旧版Excel)
如果你的Excel版本不支持LET,可以直接展开公式:
=SUMPRODUCT(E$37:E$84, MMULT(MAX(SEQUENCE(,48)-SEQUENCE(48)+1,0), TRANSPOSE($E23:$E70)))
关于之前LAMBDA报错的说明
你之前用LAMBDA出现#CALC!错误,大概率是因为没有正确处理数组维度匹配问题(比如尝试对非兼容维度的数组进行迭代运算)。上面的矩阵乘法方法通过广播特性自动处理维度,避免了迭代中的维度冲突,运算效率也更高。
内容的提问来源于stack exchange,提问作者princp69
相关产品推荐
相关产品推荐

