У меня есть пользовательская функция, которая используется для подсчета или суммирования количества цветных ячеек, которые у меня есть. Это функция:Выполнение пользовательских функций Excel VBA быстрее
Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Application.Volatile (True)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
If SUM = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.SUM(rCell, vResult)
End If
Next rCell
Else
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell
End If
ColorFunction = vResult
End Function
Он вызывается путем ввода следующей функции:
=colorfunction($A$1,A2:C2,FALSE)
или
=colorfunction($A$1,A2:C2,TRUE)
Где:
- A1 = Ячейка с цветом фона, чтобы проверить
- A2: C2 = Диапазон для подсчета
- FALSE/TRUE, = Count или Sum
Мой вопрос: Что я могу делать с VBA для ускорения этой функции?
Я попытался поэкспериментировать с частью WorksheetFunction
, но не смог найти синтаксис, который сработал. Любые другие идеи?
Кажется Q может быть лучше подходит для [Обзор Code] (http://codereview.stackexchange.com/help/on-topic). – pnuts
Удалите 'Application.Volatile', потому что ваша функция нестабильна. Сделайте все аргументы 'ByVal'. Замените 'WorksheetFunction.SUM (rCell, vResult)' на 'vResult + rCell.Value', если вы не используете' SUM' для молча игнорирования нечисловых значений. – GSerg
@GSerg Спасибо за советы. Если я удаляю 'Application.Volatile', функция не вычисляет, если я ее не заставляю. Ваша функция «WorksheetFunction ...», похоже, оказала определенное влияние. Можете ли вы объяснить свой комментарий ByVal? Спасибо – redditor