Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 对范围对象或数组使用SumIf函数_Arrays_Vba_Excel - Fatal编程技术网

Arrays 对范围对象或数组使用SumIf函数

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()是日期数组 尽管如此,代码运行良好,只是需要花费很多时间才能完成 我正在尝试这两种

我正在尝试优化使用Excel的sumif函数的sub,因为它需要花费一些时间才能完成

特定行(包含在to for循环中)如下所示:

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”)
这是故意的吗?真不敢相信我让它通过了,我觉得自己太傻了。非常感谢你,巴罗,我错了。也感谢所有花时间阅读这篇文章的人。