我试图在Excel 2016中使用类似COUNTIF的功能按照背景颜色总计一系列单元格... 3种不同颜色(绿色,黄色,红色)代表3种不同的“状态”(第一大,第二大,第三大)。我设法通过使用这个VBA编码来实现它:
Function Countcolour(rng As Range, colour As Range) As Long
Dim c As Range
Application.Volatile
For Each c In rng
If c.Interior.ColorIndex = colour.Interior.ColorIndex Then
Countcolour = Countcolour + 1
End If
Next
End Function
但是,此特定代码未考虑条件格式。
因此,例如,我尝试有条件地格式化一组数据以突出显示其第一个最大值绿色,第二大黄色,第三大红色。我在另一个块中使用此VBA函数来计算所有绿色高光。但是,由于条件格式化,它不会拾取单元格的背景颜色。
我确定我错过了一些明显的东西......我觉得If
条件的第一部分应该是c.FormatCondition.Interior
的某种形式,但我尝试过主题的变化没有成功。
提前感谢您提供的任何帮助!
答案 0 :(得分:0)
这是包括我在内的许多人尝试做的事情。
互联网上有一些有用的代码,例如http://www.cpearson.com/excel/CFColors.htm 但经过大量搜索后,我发现答案中只有一个 get conditional formatted color with vba in excel,它可以正常工作!
解决方案很简单:
您可以使用
.cells(1,1).displayformat.interior.color
或
.cells(1,1).displayformat.interior.colorIndex
示例:
Function CountColor(ByRef rng As Range, ByRef color As Long) As Variant
Dim total: total = 0
If (Not (rng Is Nothing)) Then
Dim element As Variant
For Each element In rng
total = total - (element.DisplayFormat.Interior.color = color) ' MINUS because TRUE evaluates to -1
Next element
End If
CountColor = total
End Function
Sub test_countColors()
With Sheet1
Dim rng As Range
Dim color As Long
Dim total As Long
Set rng = Range(.Cells(1, 1), .Cells(3500, 55)) ' Or anay other range
color = 8438015 ' Or any other color
total = CountColor(rng, color)
MsgBox "Total= " & total
End With
End Sub