excel vba worksheetfunction.sum

我有一个函数应该计算一个单元格数组的总和。 这个函数在另一个子程序中经常被调用,因此必须真正快速。 首先,我使用了for循环来获取数字,但它太慢了。 然后,我想使用工作表function,但这不工作原因未知。 这里是函数的代码:

Function CalcMD(rownumbers, colnumber) Dim MMDRow As Integer Dim SearchRange As String Dim FirstAddress As Boolean MMDRow = MMDRow() FirstAddress = False SearchRange = "" 'building the search range For i = 0 To UBound(rownumbers) If rownumbers(i) > 0 And rownumbers(i) < MMDRow Then If FirstAddress = False Then SearchRange = SearchRange & cells(rownumbers(i), colnumber).Address(False, False) FirstAddress = True Else SearchRange = SearchRange & ";" & cells(rownumbers(i), colnumber).Address(False, False) End If End If Next CalcMD = WorksheetFunction.Sum(Range(SearchRange)) End Function 

有没有更好/更快的方式来获得这个结果?

这是一个尝试。 最棘手的部分是find你想要总结的最后一行,如果这第一次尝试不能解决你的情况,我认为这是我们应该工作的地方。

 Function CalcMD(rownumbers, colnumber) Dim MMDRow As Integer, iMaxRow As Integer Dim SearchRange As String MMDRow = MMDRow() 'Find the last row where you want to sum the data iMaxRow = WorksheetFunction.Min(MMDRow - 1, WorksheetFunction.Max(rownumbers)) CalcMD = WorksheetFunction.Sum(Cells(iMaxRow, colnumber)) End Function 

请注意,这里没有太多的错误检查(特别是检查input数据)

使用JMax的方法:

 Function CalcMD(rownumbers, colnumber) Dim MMDRow As Integer, iMaxRow As Integer Dim SearchRange As String MMDRow = MMDRow() 'Find the last row where you want to sum the data iMaxRow = WorksheetFunction.Min(MMDRow - 1, WorksheetFunction.Max(rownumbers)) CalcMD = WorksheetFunction.SumIF(Cells(iMaxRow, colnumber),">0") End Function 

那是你在找什么?