首页 > 解决方案 > 基于字体颜色的 VBA 计数值

问题描述

当它的内容是某种字体颜色(例如,黑色)时,我需要添加一个范围的值。我所拥有的是一张表格,我在其中有条件地格式化值的颜色。例如,如果“状态=结转”,那么我将行着色为红色。(详见附件)。

现在,在条件格式之后,我想对特定列下非红色的所有数值求和。

我有一段 vba 代码来添加这样的值,但问题是,条件着色正在抛出代码。只要我手动为行着色,代码就会忽略红色行。如果我使用条件着色选项,那么即使是彩色行也会被考虑在内。

我使用这个公式调用下面的 UDF =ConditionalColorSum(C2:C30)

Public Function ConditionalColorSum(rnge As Range) As Double
' Total only cells with red font numbers
    Application.Volatile
    Dim Total As Double, cl As Range
    Total = 0
        For Each cl In rnge.Cells
            If cl.Font.Color = vbRed Then    'Change 'vbRed' to the color you want
            Total = Total + cl.Value
            End If
        Next
    ConditionalColorSum = Total
End Function

在此处输入图像描述

在此处输入图像描述

条件格式公式如下所示:

标签: excelvbaconditional-formatting

解决方案


按照这个

更改范围的条件格式或表格样式等操作可能会导致当前用户界面中显示的内容与 Range 对象的相应属性中的值不一致。使用 DisplayFormat 对象的属性返回在当前用户界面中显示的值。

由于条件格式而获得颜色的唯一方法是使用DisplayFormat

If cl.DisplayFormat.Font.Color = vbRed Then

但是按照这个

请注意,DisplayFormat 属性在用户定义的函数中不起作用。

因此,不能使用 UDF 直接从工作表中计算颜色。可以使用 SUB,但使用自定义格式用于计数的相同标准会更容易:

=COUNTIF(E2:E30,"Carry Over")

或计算它不是红色的地方:

=COUNTIF(E2:E30,"<>Carry Over")

推荐阅读