如何使用Excel VBA计算未通过条件格式设置格式化的单元格数?

时间:2011-07-31 22:17:32

标签: excel vba excel-vba excel-2007

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

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

在我的专栏中,有些单元符合格式条件并具有背景填充颜色。其他人没有填补。

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

我在Cell 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

我在各地的论坛上看过,也许我没有看到明显的问题。请帮忙。谢谢!

1 个答案:

答案 0 :(得分:3)

我花了很多时间在这上面并且设法创建了一个函数,它将告诉你在一个范围内有多少个细胞满足或者不满足条件形成条件。这仅适用于数值条件格式化(不是“包含文本”)。

  • 输入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表示&gt;) 并且公式总是以“=”开头,即使这不是其中的一部分 公式。所以你需要从.formula1剥离“=”并投射它 很久了。
  • 然后我检查操作员的状况,然后使用案例选择 测试论坛。然后我只计算一下有多少个细胞 击中(或未命中)。