Arrays 对范围对象或数组使用SumIf函数
我正在尝试优化使用Excel的sumif函数的sub,因为它需要花费一些时间才能完成 特定行(包含在to for循环中)如下所示:Arrays 对范围对象或数组使用SumIf函数,arrays,vba,excel,Arrays,Vba,Excel,我正在尝试优化使用Excel的sumif函数的sub,因为它需要花费一些时间才能完成 特定行(包含在to for循环中)如下所示: Cupones = Application.WorksheetFunction.SumIf(Range("Test_FecFinCup"), Arr_FecFlujos(i), Range("Test_MtoCup")) 其中,范围是工作簿中的命名范围,Arr_FecFlujos()是日期数组 尽管如此,代码运行良好,只是需要花费很多时间才能完成 我正在尝试这两种
Cupones = Application.WorksheetFunction.SumIf(Range("Test_FecFinCup"), Arr_FecFlujos(i), Range("Test_MtoCup"))
其中,范围是工作簿中的命名范围,Arr_FecFlujos()是日期数组
尽管如此,代码运行良好,只是需要花费很多时间才能完成
我正在尝试这两种方法
阵列:
声明我的数组
With Test
Fluj = .Range(Range("Test_Emision").Cells(2, 1), Range("Test_Emision").Cells(2, 1).End(xlDown)).Rows.Count
Arr_FecFinCup = .Range("Test_FecFinCup")
Arr_MtoCup = .Range("Test_MtoCup")
End With
Cupones = Application.WorksheetFunction.SumIf(Arr_FecFinCup, Arr_FecFlujos(i), Arr_MtoCup)
错误告诉我需要使用范围对象,因此我改为:
With Test
Set Rango1 = .Range("Test_FecIniCup")
Set Rango2 = .Range("Test_MtoCup")
End With
Cupones = Application.WorksheetFunction.SumIf(Rango1, Arr_FecFlujos(i), Rango2)
这一个,没有显示任何错误消息,但总和不正确
有谁能告诉我这些方法有什么问题,也许能给我指出正确的方向吗?似乎您试图使用一系列标准对一系列数字求和:
WorksheetFunction.SumIf(Arr_FecFinCup, Arr_FecFlujos(i), Arr_MtoCup)
如我所知,如果给criteria参数一个范围,Excel不会在该范围内迭代,而是在criteria_范围内查找与其计算的单元格行一致的一个值
比如说
Range("D3") = WorksheetFunction.SumIf(Range("A1:A10"),Range("B1:B10"))
Range("D7") = WorksheetFunction.SumIf(Range("A1:A10"),Range("B1:B5"))
Excel将实际计算如下
Range("D3") = WorksheetFunction.SumIf(Range("A1:A10"),Range("B3"))
如果没有重合,则返回值为0
比如说
Range("D3") = WorksheetFunction.SumIf(Range("A1:A10"),Range("B1:B10"))
Range("D7") = WorksheetFunction.SumIf(Range("A1:A10"),Range("B1:B5"))
那么D7总是0,因为在[B1:B5]中查找[B7]超出范围
因此,要使用多个标准进行求和,正确的方法是使用@mrtiq建议的SUMIFS。您是否尝试过
SUMIFS
?还没有,如果产生不正确求和的代码使用的命名范围略有不同,它是否以不同的方式工作。原始代码使用Range(“Test\u FecIniCup”)
作为第一个范围,而不正确的代码使用Set Rango1=.Range(“Test\u FecIniCup”)
这是故意的吗?真不敢相信我让它通过了,我觉得自己太傻了。非常感谢你,巴罗,我错了。也感谢所有花时间阅读这篇文章的人。