【问题标题】:How can I count the number of cells that are NOT formatted by conditional formatting using Excel VBA?如何使用 Excel VBA 计算未通过条件格式格式化的单元格数量?
【发布时间】:2011-07-31 22:17:31
【问题描述】:

我是 excel vba 的新手,我需要这方面的帮助。

我在工作表(“数字”)中有一个范围(A2:A22),该范围已被有条件地格式化(底部 30%)以具有颜色的背景填充(ThemeColor = xlThemeColorDark1)。

在我的专栏中,有满足格式条件并具有背景填充颜色的单元格。其他人没有空位。

在我尝试构建的宏上,我想计算范围内未使用填充格式化的单元格的数量。

我在单元格 B2 中显示了计数,但它返回 0。

Dim numberRange As Range, r As Long, count As Integer
Set numberRange = Worksheets("Numbers").Range("A2:A22")

count = 0    
For r = 1 To numberRange.Rows.Count
    If Not numberRange(r, 1).FormatConditions(1).Interior.ThemeColor = _
        xlThemeColorDark1 Then count = count + 1
Next r

Worksheets("Numbers").Range("B2").Value = count

我在各个论坛上都看过,也许我没有看到明显的内容。请帮忙。谢谢!

【问题讨论】:

  • 双重检查:它是否必须计算不是因为条件格式而特别是 ThemeColor = xlThemeColorDark1 的单元格,还是只能计算不是 ThemeColor = xlThemeColorDark1 的单元格?换句话说,是否可以安全地假设它是 Dark1,是因为条件格式?
  • 为什么不使用与定义条件格式相同的标准?
  • Excelllll,我采取了与您在下面的回答中所想的相同的方法。我想出了一种方法让 VBA 函数从条件格式中读取标准并复制检查。这是我能想到的最好的方法。 :)
  • Issun,由于条件格式,它必须计算那些不是特别颜色的单元格。
  • 在下面查看我的答案,它应该可以工作。

标签: vba excel excel-2007


【解决方案1】:

我为此花费了大量时间,并设法创建了一个函数,该函数将告诉您一个范围内有多少单元格满足或不满足条件格式条件。这仅适用于数字条件格式(不是“包含文本”)。

  • 输入 TRUE 以计算满足条件格式公式的所有单元格(默认
  • 输入 FALSE 以计算所有不满足公式的单元格

所以在你的情况下你会这样做:

=FormatCount(A2:A22, FALSE)

这里是函数!

Function FormatCount(ByVal myRange As Range, _
                     Optional ByVal check_result = True) As Long

Application.ScreenUpdating = False
Dim cell As Range
Dim count As Long
Dim result As Boolean
Dim formula1 As Long
Dim formula2 As Long

For Each cell In myRange
    On Error Resume Next
    With cell.FormatConditions
    If .count = 1 Then
        formula1 = CLng(Right(.Item(1).formula1, Len(.Item(1).formula1) - 1))
        formula2 = CLng(Right(.Item(1).formula2, Len(.Item(1).formula2) - 1))
        Select Case .Item(1).Operator
            Case 1
                If cell.Value >= formula1 And _
                    cell.Value <= formula2 Then
                    result = True
                End If
            Case 2
                If cell.Value < formula1 And _
                    cell.Value > formula2 Then
                    result = True
                End If
            Case 3
                If cell.Value = formula1 Then
                    result = True
                End If
            Case 4
                If cell.Value <> formula1 Then
                    result = True
                End If
            Case 5
                If cell.Value > formula1 Then
                    result = True
                End If
            Case 6
                If cell.Value < formula1 Then
                    result = True
                End If
            Case 7
                If cell.Value >= formula1 Then
                    result = True
                End If
            Case 8
                If cell.Value <= formula1 Then
                    result = True
                End If
        End Select
    End If
    End With

    If result = check_result Then
        count = count + 1
    End If
    result = False
Next

FormatCount = count
Application.ScreenUpdating = True

End Function

工作原理:

  • 首先我检查是否有 1 条件格式(你可以调整 如果您使用 for 循环和 .count 来检查所有条件 真的很想)。
  • 条件格式存储在 excel 中的方式是使用运算符 然后是公式。运算符按数字存储(例如 5 表示 >) 并且公式总是以“=”开头,即使那不是 公式。因此,您需要从 .formula1 中删除“=”并将其转换为 很长。
  • 然后我检查条件的运算符,然后使用 case select 测试论坛。然后我只计算有多少个细胞 命中(或未命中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多