Excel 2016中VBA SumIfs函数返回值为0的问题求助
解决Excel 2016中VBA SumIfs返回0的问题
这个问题大概率是日期格式的字符串拼接兼容性问题导致的——Excel 2016对日期字符串的解析逻辑和2007存在差异,直接将单元格对象与比较运算符拼接成字符串,很容易因为日期格式不匹配让SumIfs的条件失效,最终返回0。
给你几个可行的解决方案:
方案1:统一日期字符串格式
先把日期转成标准的yyyy-mm-dd格式字符串,这种格式在所有Excel版本里都能被正确识别:
Set today1 = Range("C2") Set BeginWeek = Range("C5") Set MilkTableP = Range("MilkTable[Total Plan]") Set datemilk = Range("MilkTable[Date]") ' 转换为标准日期格式字符串 Dim beginWeekStr As String Dim todayStr As String beginWeekStr = Format(CDate(BeginWeek.Value), "yyyy-mm-dd") todayStr = Format(CDate(today1.Value), "yyyy-mm-dd") Range("O1").Value = Application.WorksheetFunction.SumIfs _ (MilkTableP, datemilk, ">=" & beginWeekStr, _ datemilk, "<" & todayStr)
方案2:直接使用日期数值比较
Excel的日期本质是数值,直接用单元格的日期值参与条件判断,完全避免字符串拼接的问题:
Set today1 = Range("C2") Set BeginWeek = Range("C5") Set MilkTableP = Range("MilkTable[Total Plan]") Set datemilk = Range("MilkTable[Date]") Range("O1").Value = Application.WorksheetFunction.SumIfs _ (MilkTableP, datemilk, ">=" & BeginWeek.Value, _ datemilk, "<" & today1.Value)
⚠️ 注意:如果datemilk列的单元格是文本格式的日期,需要先把它们转换成日期格式,否则数值比较会失效。
额外排查要点
- 确认
MilkTableP和datemilk的引用正确:检查Excel 2016中ListObject的表名、列名是否和2007一致,有没有被误修改。 - 验证日期单元格有效性:确保
C2和C5里是有效的日期值,不是空值或文本格式的日期。 - 手动测试公式:在Excel单元格中输入
=SUMIFS(MilkTable[Total Plan],MilkTable[Date],">="&C5,MilkTable[Date],"<"&C2),如果手动公式也返回0,那问题出在数据格式或范围上,而非VBA代码。
内容的提问来源于stack exchange,提问作者Atikah Karimah
相关产品推荐
相关产品推荐

