Google Sheets中用ARRAYFORMULA实现SUMIF范围逐行递增求和
用ARRAYFORMULA实现逐行递增范围的SUMIF累计求和
针对你需要在库存流水表中,用ARRAYFORMULA实现当前行及之前行同品类数据累计求和的需求,提供以下两种可行方案:
方案1:拼接品类与行号的SUMIF写法
直接在目标单元格输入以下公式:
=ArrayFormula(IF(A3:A="",,SUMIF(A3:A&ROW(A3:A),"<="&A3:A&ROW(A3:A),B3:B)))
原理说明:
- 将A列的品类名称与对应行号拼接成唯一字符串(例如
杯子3、杯子4),确保同品类的不同行有区分度 - SUMIF的条件设置为「拼接后的字符串 ≤ 当前行的拼接字符串」,这样只会统计当前行及之前的同品类数据
- 外层用
IF(A3:A="",,)判断,避免在A列空行生成无效计算结果
方案2:MMULT矩阵乘法写法
如果需要更灵活的逻辑控制,可使用MMULT实现:
=ArrayFormula(IF(A3:A="",,MMULT(N(A3:A=TRANSPOSE(A3:A))*N(ROW(A3:A)>=TRANSPOSE(ROW(A3:A))),B3:B)))
原理说明:
N(A3:A=TRANSPOSE(A3:A)):生成一个布尔矩阵,标记哪些行的品类与当前行一致(1为匹配,0为不匹配)N(ROW(A3:A)>=TRANSPOSE(ROW(A3:A))):生成下三角矩阵,标记当前行及之前的所有行(1为符合范围,0为后续行)- 两个矩阵相乘后,通过MMULT完成逐行求和,得到当前行及之前同品类的累计值
以上两种公式均支持自动应用到新增行,无需手动下拉,完全替代你之前的手动公式逻辑。
内容的提问来源于stack exchange,提问作者Levente_Agi Szilagyi_Dano
相关产品推荐
相关产品推荐

