Excel中如何按指定条件计算固定起始行到当前行的累计和
原有公式错误说明
你写的公式存在两个核心问题:
SUMIF($J$3:J53,J53)参数顺序完全错误:SUMIF的语法是(条件判断区域, 匹配条件, 求和区域),你把J列的生产值区域当成了条件判断区域,匹配值写了当前行J列的生产数,实际是在累加所有和当前行生产值相等的单元格,完全没有关联B列项目ID、AC列状态两个判断条件。- 用
COUNTIF(AC53,1)判断当前行AC列值是否为1的写法冗余,直接做等值判断计算效率更高。
正确公式(以第53行写入、向下整列填充为例)
目前所有主流Excel版本(2007及以后)都支持多条件求和函数SUMIFS,直接用下面的公式即可完全匹配需求:
=IF(AC53=1,SUMIFS($J$3:J53,$B$3:B53,B53,$AC$3:AC53,1),0)
公式逻辑拆解
- 最外层
IF(AC53=1,...,0):先判断当前行successornot值是否为1,不是1直接返回0,和你预期结果中AC列为0的行全部返回0的逻辑一致。 - 核心
SUMIFS多条件求和部分:- 第一参数
$J$3:J53:实际求和区域,固定从J3起始到公式所在当前行,起始单元格用绝对引用锁死、当前行锁列不锁行,下拉填充时会自动扩展累计范围。 - 第二、三参数
$B$3:B53,B53:第一个判断条件——累计范围内B列项目ID和当前行B列ID一致。 - 第四、五参数
$AC$3:AC53,1:第二个判断条件——累计范围内对应行的successornot值为1,只累加符合状态要求的生产值。
- 第一参数
结果校验
将公式代入你给出的示例表,返回结果和预期完全一致:
| Projectid(B) | successornot(AC) | production(J) | 公式返回结果 |
|---|---|---|---|
| 1 | 1 | 20 | 20 |
| 1 | 1 | 40 | 60 |
| 1 | 1 | 10 | 70 |
| 2 | 0 | 20 | 0 |
| 2 | 0 | 400 | 0 |
| 3 | 1 | 20 | 20 |
| 4 | 0 | 1 | 0 |
| 5 | 0 | 24 | 0 |
| 6 | 0 | 50 | 0 |
| 7 | 1 | 10 | 10 |
| 7 | 1 | 40 | 50 |
| 7 | 1 | 20 | 70 |
旧版Excel兼容写法
如果你使用的是2003及更早不支持SUMIFS的Excel版本,可以用SUMPRODUCT实现同样效果:
=IF(AC53=1,SUMPRODUCT(($B$3:B53=B53)*($AC$3:AC53=1)*$J$3:J53),0)
注意:使用
SUMPRODUCT时不要引用整列数据,保持上述逐行扩展的范围写法即可,否则会大幅降低表格计算速度。
内容的提问来源于stack exchange,提问作者Cathy11
相关产品推荐
相关产品推荐

