根据背景颜色计算excel中文本的实例

时间:2013-01-09 02:09:15

标签: excel vba excel-vba excel-formula

sample excel

要求是一段代码,它可以计算字符串的实例,即(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公式,但是我只能搜索文本和计数,它不会根据单元格的背景颜色计算。

3 个答案:

答案 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

它需要三个参数:要评估的范围,要搜索的字符串以及是否计算有色(或无色)单元格:

enter image description here

因此,在上面的E栏中,公式为:

=CountByColorAndText($A$2:$A$13,$D3,FALSE)

在F栏中除了最后一个参数外,它是相同的,CountColoredTRUE

我没有写很多用户定义的函数,所以有人可能会出现并指出问题或改进。

答案 1 :(得分:2)

而不是Font.Color使用Interior.Color

答案 2 :(得分:0)

再次编写代码会很棒。但是我有一个修改后的代码,如果你有兴趣看一下......我只是想知道这是否是一些通信项目,因为昨天OP问同样的问题....

VBA, COUNTIF, Exclude based on cell color

BTW INTERIOR.COLOR会显示一个代表RGB的大数字,您可能想要使用INTERIOR.COLORINDEX

由于您正在检查RGB格式,因此您可以尝试以下操作。不过我建议您不要使用select,这会降低您的代码速度。您可以根据自己的需要更改sheetsranges

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