SUMIFS函数仅返回首个匹配值,无法汇总全部符合条件的值
问题分析与解决方案
问题根源
你使用的SUMIFS搭配INDEX(Sheet6!$B$3#,,2)返回的动态数组时,SUMIFS无法正确遍历整个数组——因为SUMIFS最初是为单元格区域设计的,对动态溢出数组(#标识的数组)的遍历支持存在局限,只会读取数组的第一个元素,导致效果像查找函数而非求和。
可行解决方案
方案1:给INDEX数组添加类型转换,适配SUMIFS
用T()(适配文本型数值)或N()(适配数值型数据)函数包裹INDEX返回的数组,把动态数组转换成SUMIFS可识别的遍历序列:
=SUMIFS(T(INDEX(Sheet6!$B$3#,,2)),INDEX(Sheet6!$B$3#,,3),[@Date])
如果求和的是纯数值数据,把T()替换为N()即可。
方案2:修复SUMPRODUCT的日期匹配问题
你遇到的SUMPRODUCT日期错误,是因为动态数组中的日期在匹配时未被正确识别为数值型序列号。直接用布尔判断+乘积的方式规避:
=SUMPRODUCT((INDEX(Sheet6!$B$3#,,3)=[@Date])*INDEX(Sheet6!$B$3#,,2))
原理:(INDEX(Sheet6!$B$3#,,3)=[@Date])返回布尔数组(TRUE/FALSE),乘以数值数组时自动转换为1/0,SUMPRODUCT会计算所有乘积的和,即符合条件的数值总和。
方案3:Excel 365/2021+ 用SUM+FILTER更直观
如果你的Excel版本支持动态数组函数,直接用FILTER筛选符合条件的数值再求和,逻辑更清晰且无兼容问题:
=SUM(FILTER(INDEX(Sheet6!$B$3#,,2),INDEX(Sheet6!$B$3#,,3)=[@Date]))
FILTER会直接返回所有匹配日期的数值,SUM对其求和,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

