Excel VBA用户定义函数,可使用条件格式对单元格进行计数

时间:2019-02-18 18:14:31

标签: excel vba

我正在尝试编写一个UDF,该UDF计算具有条件格式的单元格的数量。我写了下面的子程序,看起来很像魅力:

Sub SumCountByConditionalFormat()
Dim cellrngi As Range
Dim cntresi As Long

cntresi = 0

Set cellrngi = Sheets("Sheet3").Range("I2:I81")

For Each i In cellrngi
    If i.DisplayFormat.Interior.Color <> 16777215 Then
    cntresi = cntresi + 1
    End If
Next i
end sub

,我尝试使用以下代码将其转换为UDF:

Function CountCellsByColor1(rData As Range) As Long
Dim cntRes As Long

Application.Volatile
cntRes = 0
For Each cell In rData
    If cell.DisplayFormat.Interior.Color <> 16777215 Then
        cntRes = cntRes + 1
    End If
Next cell

CountCellsByColor1 = cntRes
End Function     

但是,当我尝试UDF时,我得到一个#VALUE!回到。我真的不确定为什么,将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以解决无法使用DisplayFormat在UDF中访问Evaluate

Function DFColor(addr As String)
    DFColor = Range(addr).DisplayFormat.Interior.Color
End Function


Function CountCellsByColor1(rData As Range) As Long
    Dim cntRes As Long, clr As Long, cell As Range
    cntRes = 0
    For Each cell In rData.Cells
        'Evaluate the formula string in the context of the
        '  worksheet hosting rData
        clr = rData.Parent.Evaluate("DFColor(""" & cell.Address() & """)")
        If clr <> 16777215 Then
            cntRes = cntRes + 1
        End If
    Next cell
    CountCellsByColor1 = cntRes
End Function