如何实现基于选定日期范围动态调整SUMIFS公式的列数?
动态多列范围的SUMIFS实现方案
方法1:Excel 365/2021 专属(支持动态数组)
直接用下面的公式就能实现按起止月份动态求和,假设A列是分类、B-D是月份列、G1存起始月、I1存结束月、F3是要匹配的分类:
=SUM(SUMIFS(INDEX(B$2:D$6,,SEQUENCE(MATCH(I$1,B$2:D$2,0)-MATCH(G$1,B$2:D$2,0)+1,,MATCH(G$1,B$2:D$2,0))),A$2:A$6,F3))
拆解说明:
MATCH(G$1,B$2:D$2,0):定位起始月份对应的列号MATCH(I$1,B$2:D$2,0):定位结束月份对应的列号SEQUENCE(...):生成从起始列到结束列的连续列号序列INDEX(...):根据列号序列提取出要汇总的多列数据范围SUMIFS会对每一列单独计算匹配F3的总和,最后用SUM把这些结果加起来
方法2:兼容旧版Excel(无动态数组)
如果你的Excel版本不支持动态数组,用SUMPRODUCT搭配INDEX实现更稳定的动态求和:
=SUMPRODUCT((A$2:A$6=F3)*INDEX(B$2:D$6,,ROW(INDIRECT(MATCH(G$1,B$2:D$2,0)&":"&MATCH(I$1,B$2:D$2,0)))))
拆解说明:
INDIRECT(...):把起止列号转换成类似1:2的范围文本ROW(...):生成对应列号的数组INDEX(...):提取出起止月份之间的所有列数据(A$2:A$6=F3):筛选出和F3分类匹配的行,符合条件的行返回1,否则0SUMPRODUCT把两个数组相乘后求和,相当于完成带条件的多列汇总
避坑提示
- 必须保证G1、I1的月份文本和B2:D2的表头完全一致(大小写、空格都不能错),不然
MATCH会返回错误值 - 如果担心出现起始月晚于结束月的情况,可以在公式开头加判断:
IF(MATCH(G$1,B$2:D$2,0)>MATCH(I$1,B$2:D$2,0),0,...),避免计算出错 - 尽量别用
OFFSET(易失性函数,会拖慢文件),上面的旧版方案已经用INDEX替代了它
内容的提问来源于stack exchange,提问作者Kaelo Aaj
相关产品推荐
相关产品推荐

