Excel动态OFFSET求和:非零起始最多取4个月且不超过当前月
Excel累计求和公式修改方案
原有公式问题
- OFFSET函数的参数分隔符错误使用了点,需替换为英文逗号
- 偏移宽度直接写了固定值4、8,没有加入当前月的边界判断,导致统计到当前月之后的无效数据
前置设置
找一个空白单元格存储当前月对应的列号(示例中用$P$1存储,可自行修改位置):
你的表头A~J列依次对应Jan、Feb、Mar、Apr、Jun、Jul、Aug、Oct、Nov、Dec,若当前月为Nov,对应I列,就把$P$1的值设为9,后续修改当前月仅需更新该单元格即可。
修改后公式
第1周期(首非零值开始最多4个月)求和公式
适配365/2021及以上版本(支持LET函数,逻辑更清晰):
=IFERROR(LET( first_col, MATCH(TRUE,A2:J2<>0,0), end_col, MIN(first_col+3,$P$1), IF(first_col>$P$1,0,SUM(INDEX(A2:J2,first_col):INDEX(A2:J2,end_col))) ),"")
适配所有Excel版本的兼容写法:
=IFERROR(IF(MATCH(TRUE,A2:J2<>0,0)>$P$1,0,SUM(INDEX(A2:J2,MATCH(TRUE,A2:J2<>0,0)):INDEX(A2:J2,MIN(MATCH(TRUE,A2:J2<>0,0)+3,$P$1)))),"")
第2周期(首非零值开始第5~8个月)求和公式
适配365/2021及以上版本:
=IFERROR(LET( first_col, MATCH(TRUE,A2:J2<>0,0), start_col, first_col+4, end_col, MIN(first_col+7,$P$1), IF(start_col>$P$1,0,SUM(INDEX(A2:J2,start_col):INDEX(A2:J2,end_col))) ),"")
适配所有Excel版本的兼容写法:
=IFERROR(IF(MATCH(TRUE,A2:J2<>0,0)+4>$P$1,0,SUM(INDEX(A2:J2,MATCH(TRUE,A2:J2<>0,0)+4):INDEX(A2:J2,MIN(MATCH(TRUE,A2:J2<>0,0)+7,$P$1)))),"")
效果验证
按你给出的测试数据,将$P$1设为9(对应当前月为Nov):
- 第一行首非零在C列(列号3):第一周期取CF列,和为2+3+4+5=14;第二周期取GI列,和为6+7+2=13,和预期结果完全匹配
- 第二行首非零在G列(列号7):第一周期取G~H列,和为2+1=3;第二周期起始列11大于当前月列号9,返回0,和预期结果完全匹配
内容的提问来源于stack exchange,提问作者Student Guess
相关产品推荐
相关产品推荐

