要求是一段代码,它可以计算字符串的实例,即(ABC,DEF,GHK),基于它们是否存在于有色单元格中,并将结果放在下面的单元格中,如图所示。
有人可以提供建议吗?
我尝试了一个示例代码
Sub Color()
Dim varCounter As String
Dim color As Integer
Dim nocolor As Integer
Range("E5").Select
color= 0
nocolor= 0
Do Until Selection.Value = ""
If Selection.Font.Color = RGB(255, 0, 0) Then
color= color+ 1
Else
nocolor= nocolor+ 1
End If
Selection.Offset(1, 0).Select
Loop
Range("E47").Select
Selection.Value = no
Range("E48").Select
Selection.Value = color
End Sub
这是一个非常简单的代码,用于检查文本字体是否有颜色,但是我找不到任何检查单元格背景颜色的内容。
我也尝试过excel公式,但是我只能搜索文本和计数,它不会根据单元格的背景颜色计算。
答案 0 :(得分:3)
这是一个简单的用户定义函数。您可以将它放在常规模块中。然后,您可以从工作簿中的任何工作表中调用它:
Public Function CountByColorAndText(rng As Excel.Range, SearchText As String, CountColored As Boolean) As Long
Dim cell As Excel.Range
Dim CellCount As Long
For Each cell In rng
If cell.Value = SearchText Then
If (cell.Interior.ColorIndex = -4142 And Not CountColored) Or _
(cell.Interior.ColorIndex <> -4142 And CountColored) Then
CellCount = CellCount + 1
End If
End If
Next cell
CountByColorAndText = CellCount
End Function
它需要三个参数:要评估的范围,要搜索的字符串以及是否计算有色(或无色)单元格:
因此,在上面的E栏中,公式为:
=CountByColorAndText($A$2:$A$13,$D3,FALSE)
在F栏中除了最后一个参数外,它是相同的,CountColored
是TRUE
。
我没有写很多用户定义的函数,所以有人可能会出现并指出问题或改进。
答案 1 :(得分:2)
而不是Font.Color
使用Interior.Color
答案 2 :(得分:0)
再次编写代码会很棒。但是我有一个修改后的代码,如果你有兴趣看一下......我只是想知道这是否是一些通信项目,因为昨天OP问同样的问题....
VBA, COUNTIF, Exclude based on cell color
BTW INTERIOR.COLOR
会显示一个代表RGB的大数字,您可能想要使用INTERIOR.COLORINDEX
由于您正在检查RGB
格式,因此您可以尝试以下操作。不过我建议您不要使用select
,这会降低您的代码速度。您可以根据自己的需要更改sheets
,ranges
。
e.g。
Dim rng as Range
Dim cell as Range
'-- name column
Set rng = Sheets(2).Cells(Sheets(2).Rows.Count, "C").End(xlUp).Row
color= 0
nocolor= 0
For Each Cell In rng
If Cell.InteriorColor = RGB(256,0,0) then
color= color+ 1
Else
nocolor= nocolor+ 1
End If
Next Cell
'--output
Sheets(2).Range("E47").Value = nocolor
Sheets(2).Range("E48").Value = color