我有一個自定義函數用於計算或求和我有多少個彩色單元格。這是函數:快速定製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 =計數或薩姆
我的問題是:有什麼我可以做到VBA加快這個功能?
我試圖用WorksheetFunction
部分進行實驗,但無法找到有效的語法。任何其他想法?
似乎Q可以更好地適合於[代碼審查(http://codereview.stackexchange.com/help/on-topic )。 – pnuts
因爲你的函數不穩定,刪除'Application.Volatile'。使所有參數'ByVal'。用'vResult + rCell.Value'替換'WorksheetFunction.SUM(rCell,vResult)',除非您使用'SUM'靜默地忽略非數字值。 – GSerg
@Gserg感謝您的提示。如果我刪除了'Application.Volatile',那麼除非強制它,否則該函數不會計算。你的'WorksheetFunction ...'似乎已經產生了一些影響。你能解釋你的'ByVal'評論嗎?謝謝 – redditor