excel - 基于字体颜色的 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
条件格式公式如下所示:
解决方案
按照这个
更改范围的条件格式或表格样式等操作可能会导致当前用户界面中显示的内容与 Range 对象的相应属性中的值不一致。使用 DisplayFormat 对象的属性返回在当前用户界面中显示的值。
由于条件格式而获得颜色的唯一方法是使用DisplayFormat
If cl.DisplayFormat.Font.Color = vbRed Then
但是按照这个
请注意,DisplayFormat 属性在用户定义的函数中不起作用。
因此,不能使用 UDF 直接从工作表中计算颜色。可以使用 SUB,但使用自定义格式用于计数的相同标准会更容易:
=COUNTIF(E2:E30,"Carry Over")
或计算它不是红色的地方:
=COUNTIF(E2:E30,"<>Carry Over")
推荐阅读
- jquery - 从 Ajax 请求解析 Json 数据时出错
- c - 具有共享数据的 OpenMP 递归任务导致速度大幅下降
- angular9 - ngcc 中的错误已在 id xxxx 的进程中运行
- kubernetes - Apache Flink 作业未在 Kubernetes(副本)中的多个 TaskManager 上调度
- airflow - Airflow - 一次从 dags_folder 中清除所有已删除 DAG 文件的 Web UI 中的所有 DAG 条目
- python - 如何在 @patch 装饰器中引用 unittest TestClass 属性
- c# - 更新实体框架中的多级属性
- amazon-web-services - emr-6.0.0-beta2 HiveLLAP 低 vCore 分配和利用率
- docker - 在 .net 核心应用程序的 dockerfile 中指定环境变量
- neo4j - 如何使用 cypher-shell (Windows) 将包含变音符号的密码脚本 (UTF-8) 通过管道传输到 neo4j?