【问题标题】:Counting cells in Excel with with same interior color using VBA使用VBA计算具有相同内部颜色的Excel中的单元格
【发布时间】:2015-04-11 00:36:50
【问题描述】:

我正在尝试计算重复的单元格。在列中,我首先使用条件格式查找重复项。我将单元格突出显示为黄色 (RGB(255,255,255))。但是,当我尝试计算突出显示的单元格时,由于某种原因,我的 vba 没有检测到它们。

如果我在条件格式上突出显示单元格,我的函数会检测到颜色并正确计数。关于为什么我无法检测到条件格式的任何想法?

Function colorCount(arr As Variant, r As Integer, G As Integer, B As Integer) As Integer
Dim x As Variant
Dim xRow As Integer
Dim xCol As Integer

colorCount = 0
For Each x In arr.Cells

xRow = x.Row
xCol = x.Column

If Cells(xRow, xCol).Interior.Color = RGB(r, G, B) Then
colorCount = colorCount + 1
End If
Next

End Function

谢谢。

【问题讨论】:

  • 为什么不使用应用于 CF 的逻辑进行计数? CF 没有设置 Interior.Color,所以这种方法永远不会奏效。
  • 仅供参考 Cells(xRow, xCol).Interior.Color 在这里与 x.Interior.Color 相同,因此您的代码可以更短(即使由于@teylyn 概述的原因它不起作用)
  • 不幸的是,我没有对我的副本使用任何逻辑。我正在使用条件格式中内置的 excel。但是,发送的链接@pnuts 可能很有用。谢谢。

标签: vba excel conditional-formatting


【解决方案1】:

事实证明,条件格式实际上并不像“传统”格式那样为单元格着色。

有两种方法可以解决这个问题:

  1. 使用 VBA 检测您的重复项:

    ' dupe check requires cells to be highighted
    YourWB.Sheets(1).Range("A" & Rows.Count).End(xlUp).Select
    
    ' now check that row for dupes, and flag each dupe with some formatting
    Dim d As Object, e
    Set d = CreateObject("scripting.dictionary")
    For Each e In Intersect(Columns(ActiveCell.Column), ActiveSheet.UsedRange)
        If e.Value <> vbNullString Then
            If Not d.exists(e.Value) Then d(e.Value) = 1 Else _
                e.Font.ColorIndex = 4
        End If
    Next
    
  2. 检测应用的条件颜色。

这个稍微复杂一点,我用的是代码on this page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多