Excel技术问询:如何基于另一列计算动态滚动求和?
Excel 基于另一列的动态滚动求和实现方法
根据对应行的「No of days」数值,计算「Daily sales」列从当前行往前数对应天数的滚动求和(包含当前行),以下是三种实用实现方法:
方法1:INDEX+SUM(稳定兼容所有Excel版本)
这是最稳妥的方案,不会因行数不足出现错误值。假设数据从第2行开始:
- 「Daily sales」列在B列,「No of days」列在C列,结果列在D列
- D2单元格输入公式:
=SUM(INDEX(B:B, MAX(1, ROW()-C2+1)):INDEX(B:B, ROW()))
- 下拉填充公式到所有行
公式说明:
MAX(1, ROW()-C2+1):确保求和起始行不会小于第1行,避免超出数据范围INDEX(B:B, ...):定位求和区域的起始和结束单元格SUM(...):对指定区域求和
方法2:OFFSET+SUM(兼容旧版Excel,需处理边界)
适合没有动态数组功能的旧版Excel,但需要额外处理行数不足的情况:
- D2单元格输入公式:
=IFERROR(SUM(OFFSET(B2, -(C2-1), 0, C2, 1)), SUM(B$2:B2))
- 下拉填充公式到所有行
公式说明:
OFFSET(B2, -(C2-1), 0, C2, 1):以B2为基点,向上偏移C2-1行,取高度为C2的单元格区域IFERROR(...):当行数不足(比如前几行的「No of days」大于已有的行数)时,自动求和从第2行到当前行的所有数据
方法3:TAKE+SUM(Excel 365及以后版本,简洁高效)
利用动态数组函数实现极简写法:
- D2单元格输入公式:
=SUM(TAKE(B$2:B2, C2))
- 下拉填充公式到所有行
公式说明:
TAKE(B$2:B2, C2):从B2到当前行的区域中,提取最后C2个单元格SUM(...):对提取的区域求和,自动处理行数不足的情况
示例验证
假设输入数据如下:
| 日期 | Daily sales | No of days | 结果(动态求和) |
|---|---|---|---|
| 2024/1/1 | 100 | 1 | 100 |
| 2024/1/2 | 200 | 2 | 300 |
| 2024/1/3 | 150 | 3 | 450 |
| 2024/1/4 | 300 | 2 | 450 |
| 2024/1/5 | 250 | 3 | 700 |
使用上述任意方法均可得到表格中标注的结果。
内容的提问来源于stack exchange,提问作者VanodyaPerera
相关产品推荐
相关产品推荐

