如何缩短指定的Excel数组求和公式?新手求助
Excel数组求和公式优化方案
原公式逻辑回顾
你当前的公式对四组间隔10行的区域做重复判断:检查区域内是否包含"Bench"或"Press",满足条件时计算对应V列与W列的乘积之和,最后将四组结果累加。重复的结构导致公式冗余过长。
优化后的公式
方案1:适用于Excel 365/2021(支持动态数组)
=SUM(BYROW(ROW(1:4),LAMBDA(x,SUMPRODUCT(--((ISNUMBER(SEARCH("Bench",OFFSET($P$9:$U$11,(x-1)*10,0))))+(ISNUMBER(SEARCH("Press",OFFSET($P$9:$U$11,(x-1)*10,0))))),OFFSET($V$9:$V$11,(x-1)*10,0),OFFSET($W$9:$W$11,(x-1)*10,0)))))
- 逻辑:用
ROW(1:4)生成1-4的序号对应四组区域,OFFSET根据序号每次偏移10行批量获取目标区域,SUMPRODUCT计算单组符合条件的乘积和,最后用SUM汇总所有组结果。 - 优势:无需重复编写多组区域逻辑,输入后直接回车即可生效。
方案2:适用于旧版本Excel(无动态数组支持)
=SUM( SUMPRODUCT(--((ISNUMBER(SEARCH("Bench",$P$9:$U$11)))+(ISNUMBER(SEARCH("Press",$P$9:$U$11)))),$V$9:$V$11,$W$9:$W$11), SUMPRODUCT(--((ISNUMBER(SEARCH("Bench",$P$19:$U$21)))+(ISNUMBER(SEARCH("Press",$P$19:$U$21)))),$V$19:$V$21,$W$19:$W$21), SUMPRODUCT(--((ISNUMBER(SEARCH("Bench",$P$29:$U$31)))+(ISNUMBER(SEARCH("Press",$P$29:$U$31)))),$V$29:$V$31,$W$29:$W$31), SUMPRODUCT(--((ISNUMBER(SEARCH("Bench",$P$39:$U$41)))+(ISNUMBER(SEARCH("Press",$P$39:$U$41)))),$V$39:$V$41,$W$39:$W$41) )
- 逻辑:用
SUMPRODUCT替代原公式的SUM(IF(...)),--将逻辑判断结果转为1/0,直接与V、W列乘积相乘求和;无需按Ctrl+Shift+Enter执行数组计算。 - 优势:比原公式更简洁,避免数组输入的操作失误,兼容性更强。
注意事项
- 公式中的分隔符(逗号/分号)需根据Excel系统区域设置调整,中文系统默认用逗号,英文系统用分号。
SEARCH是不区分大小写的匹配,若需要区分大小写,替换为FIND即可。
内容的提问来源于stack exchange,提问作者Snorlax
相关产品推荐
相关产品推荐

