У меня есть функция, которая должна вычислять сумму в массиве ячеек. Эта функция вызывается в другой подпрограмме очень часто и поэтому должна быть реальной. Сначала я использовал цикл for для получения чисел, но он был слишком медленным. Затем я хотел использовать функцию листа, но это не работает по неизвестным причинам. Вот код функции:excel vba workheetfunction.sum
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
Есть ли лучший/быстрый способ получить этот результат?
Что такое 'MMDRow()'? И увидеть скриншот или рабочий пример того, что вы хотите достичь, будет удобно :) – brettdj
Я получаю массив всех рябинов, где определенное имя находится в ячейке. Но мне не нужна последняя строка, где это имя, потому что в нем содержится ячейка для суммы других строк. Функция вычисляет сумму человеко-дней в ежемесячной колонке. Если это значение больше, чем максимальное допустимое значение, я должен уменьшить значения в этом столбце. После каждого уменьшения я вызываю функцию, чтобы проверить, равна ли сумма максимально допустимому значению. Поэтому он должен быть очень быстрым. Надеюсь, это поможет. – user366121
MMDRow() - это еще одна функция, которая получает строку над суммами. – user366121