我的 excel 工作表上有一些条件格式条件,这些条件会用不同的颜色填充单元格。我试图计算 excel 中由我的条件格式着色的单元格数量,以便我可以检查它们的比例,但出于某种原因,无论如何它都会一直返回 0。这是我的 VBA 函数:
Function CountCellsByColor(data_range As Range, cell_color As Range)
Dim cell As Range
Dim cnt As Integer
cnt = 0
For Each cell In data_range
If cell_color.Interior.Color = cell.Interior.Color Then
cnt = cnt + 1
End If
Next cell
CountCellsByColor = cnt
End Function
我有 4 个不同的条件来填充单元格的颜色,但此函数均未检测到任何条件。当我让函数计算某个范围内的白色单元格时,它会正常计算。是不是在处理条件格式时,它会给出一种无法通过这种方式检测到的“假”颜色?还是我的代码出了其他问题?
十分感谢你的帮助!
答案1
Interior.Color 属性仅提供直接应用于单元格的颜色。要访问条件格式生成的颜色,请使用 DisplayFormat.Interior.Color 属性。
请注意,这在用户定义函数中不起作用,因此您必须将函数更改为子函数,将结果写入工作表的某个位置。
答案2
如果您想将此函数用作 UDF,您应该使用 DisplayFormat 属性,如前所述,此外您还应该间接调用此函数作为 Evaluate 方法的文本参数。
Function CountCellsByColor(data_range As Range, cell_color As Range)
Dim cell As Range
Dim cnt As Integer
cnt = 0
For Each cell In data_range
If cell_color.DisplayFormat.Interior.Color = cell.DisplayFormat.Interior.Color Then
cnt = cnt + 1
End If
Next cell
CountCellsByColor = cnt
End Function
Function ECountCellsByColor(data_range As Range, cell_color As Range)
' Application.Volatile ' if necessary
ECountCellsByColor = data_range.Parent.Evaluate("CountCellsByColor(" & _
data_range.Address & "," & cell_color.Address & ")")
End Function