VBA调用WorksheetFunction.SumIfs报错及返回0结果问题咨询
VBA调用WorksheetFunction.SumIfs计算结果为0的原因及解决方案
核心问题原因
- 日期格式序列化错误:VBA中
Date类型变量和字符串拼接时,默认会转换为mm/dd/yyyy格式的美式日期字符串,你使用的22/07/2021为dd/mm/yyyy格式欧式日期,直接拼接">=" & Start_date_range生成的条件会被Excel识别为错误的日期阈值,匹配不到符合条件的行就会返回0。 - 区域引用未绑定工作表:代码中的
Range(range_to_sum)、Range(range_date_search)没有指定所属工作表,默认取当前活动工作表的对应区域,如果运行代码时活动表不是Data_Graph2,就会引用错误区域,计算结果自然不符。 - 参数范围不匹配:你给出的工作表公式中待求和区域是
C2:C14,条件区域是B2:B14,而VBA代码里的条件区域range_date_search是B2:B15,待求和区域和条件区域行数不一致也会造成匹配异常。
修正方案
- 把日期参数转成Double类型的Excel序列值再拼接,完全规避日期格式识别误差
- 所有Range对象都绑定到目标工作表,避免活动表跳转导致的引用错误
- 对齐待求和区域和条件区域的行数,和工作表公式参数保持一致
修正后的代码如下:
Dim ws As Worksheet Set ws = Worksheets("Data_Graph2") ' 日期转序列值避免格式问题,所有区域绑定目标工作表 ws.Range(range_sum_result).Value = WorksheetFunction.SumIfs( _ ws.Range(range_to_sum), _ ws.Range("B2:B14"), _ ">=" & CDbl(Start_date_range), _ ws.Range("B2:B14"), _ "<=" & CDbl(End_date_range) _ )
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

