计算excel中有条件格式化的单元格

时间:2014-01-10 15:14:36

标签: excel excel-vba counting conditional-formatting vba

非常感谢您查看我的问题。

基本上我有一个我有条件格式化的仪表板 - 取决于返回到该单元格的值,如果单元格变为红色或保持白色/无阴影。我在仪表板顶部有一系列行,需要总计每列下的红色单元格数(因此H8总和了H10:H21范围内的红色单元格总数)。

我试图编写VB宏来计算单元格。该函数使用=CountRed(Range:Range)调用,因此在我之前的示例单元格H8 =CountRed(H11:H21)

我遇到的问题是宏不会​​返回红色单元格的正确数字。 (例如,当有3个时,它将返回5.)我也不知道为什么我的函数不是动态的;同时使用Application.VolatileApplication.Volatile(True)不会改变任何事情。

Function CountRed(MyRange As Range)
 Dim iCount As Integer
 Application.Volatile
 iCount = 0
 For Each cell In MyRange
    If cell.Interior.ColorIndex = 22 Then
        iCount = iCount + 1
    End If
 Next cell
 CountRed = iCount
End Function

所有格式化的单元格都是相同的红色(22)。

再次感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

你可能想看一下countif函数。

http://office.microsoft.com/en-au/excel-help/countif-HP005209029.aspx

您可能需要将条件格式化逻辑重现为此函数的if条件,但这应该非常简单。发布有关表格和表格的更多信息。条件格式规则,如果您需要帮助。

答案 1 :(得分:0)

尝试使用

If cell.DisplayFormat.Interior.ColorIndex = 22 Then

而不是

If cell.Interior.ColorIndex = 22 Then

请注意,如果您直接从工作表中调用它们,则相应于此article DisplayFormat属性在用户定义的函数中不起作用。但是如果你从宏中调用它,它就可以工作:

Sub test()
   MsgBox CountRed(Range("C1:C12"))
End Sub

答案 2 :(得分:-1)

CELL功能可能是您需要的答案。

CELL(info_type,reference)

其中一个info_type是格式。虽然它不包括所有类型的格式,但它涵盖了足够广泛的设置,以便它可以满足您的需要。

无论是格式化货币,还是彩色,或者是否有括号,它都可以获取。它可以拾取左,右,居中,填充的文本。

它无法拾取背景颜色,字体类型/重量/倾斜。