【问题标题】:VBA Count values based on font color基于字体颜色的 VBA 计数值
【发布时间】:2019-12-03 20:42:15
【问题描述】:

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

现在,在条件格式化之后,我想将特定列下所有 NOT 红色的数值相加。

我有一段 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

条件格式公式如上所示:

【问题讨论】:

    标签: excel vba conditional-formatting


    【解决方案1】:

    根据THIS

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

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

    If cl.DisplayFormat.Font.Color = vbRed Then
    

    但是根据THIS

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

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

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

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

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

    【讨论】:

    • 感谢您的回复,斯科特。我认为您的建议很好地计算了已结转的物品数量(我认为我也需要)。但是,如果我想获得 C 列(“尺寸”)下那些“结转”项目的总和怎么办?
    • 然后使用SUMIFS():=SUMIFS(C2:C30,E2:E30,"Carry Over")
    • 再想一想,我认为我“冗长”的解决方法是获取每个“结转”的相应 C 列单元格值的值。绝对不是一个班轮或一种有效的方式。如果您有其他想法,请告诉我。
    • 听起来像是一个计划 :) 让我试一试。
    • Scott - You da man :) 工作就像一个魅力。谢谢你,好心的先生!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    相关资源
    最近更新 更多