`
阅: 1396 | 回: 11
发表于2022/5/3 9:08:12 楼主 
头像 等级:初学者
积分:5
财富值:0.9
身份:普通用户

1日 2日 3日 4日 5日 ............. 标红字体个数
4 3 2 4 4
5 4 3 3 3
1 2 3 2 1
有这样一个日完成的数据表,每行的条件格式不一样,不满足条件格式就会显示为红色的字体。用什么公式能自动统计每行红色字体的个数?


补充内容(2022/5/3 9:36:00):
字体颜色为条件格式自动生成的
我的个性签名
发表于 2022/5/3 13:30:46   
头像 等级:学者
积分:58
财富值:3
身份:普通用户

利用方方格子的“统计与分析”=》"颜色统计“=》”按字体颜色“,然后设定统计区域、字体颜色、统计方式、勾选支持条件格式。

如果你的字体颜色是自己设定的也会被统计在内,这是你需要注意的。

如果按你的要求要用公式的话,只能利用VBA写公式了。


我的个性签名
发表于 2022/5/3 14:49:04   
头像 等级:传说级人物
积分:2663
财富值:1853
身份:普通用户

回复:2楼


我的个性签名
发表于 2022/5/3 15:08:05   
头像 等级:初学者
积分:5
财富值:1
身份:普通用户

回复:2楼


用VBA怎么实现呢?就是每天的数据达到条件格式的要求后,后面统计标红个的单元格可以自动计算出来。

因为我有非常多的行和列的数据,每次这样执行一下的话太费时间,请问有办法能实现吗?

我的个性签名
发表于 2022/5/3 18:30:50   最佳方案
头像 等级:学者
积分:58
财富值:3
身份:普通用户

本来想给你写个自定义函数,但是单元格的DisplayFormat属性在自定义函数中不能引用(搞了半天才在官方文档中发现)。给你写了个子程序,根据你的实际可以调整一两个参数就可以批量运行了。



Public Sub st()
' 利用单元格显示的颜色与红色进行比较,统计区域内红色单元格个数。

    Dim a As Range, result As Long, rg As Range
    Dim i As Integer
  
    For i = 2 To 33  ' 对第2至4行进行循环计算
        Set rg = Range("A" & i & ":" & "F" & i)  ' 设定需要统计的区域
          result = 0
        For Each a In rg   ' 对统计区域中每个单元格显示的颜色与红色进行比较,相同计数result值加1。
                If a.DisplayFormat.Font.Color = RGB(255, 0, 0) Then
                result = result + 1
                End If
        Next a
        Range("G" & i) = result  '将统计结果赋值到结果存储区域
    Next i
End Sub


附件:   下载    在线编辑
我的个性签名
发表于 2022/5/4 12:40:19   
头像 等级:初学者
积分:5
财富值:1
身份:普通用户

回复:5楼

result = result + 1,这个+1是什么意思?


宏计算出来的比我手工算出来的都多1


我的个性签名
发表于 2022/5/4 14:22:48   
头像 等级:学者
积分:58
财富值:3
身份:普通用户

回复:6楼

只要单元格颜色是红色,结果就在原来的基础上加1啊。这个是统计A列到F列的。

我的个性签名
发表于 2022/5/4 15:23:52   
头像 等级:初学者
积分:5
财富值:1
身份:普通用户

回复:7楼


我也不知道是那里的问题,同样的宏我又换了一张表,运行宏就把区域内的单元格数量全部计算出来了,不会计算条件格式为红色字体的个数了。我看了一下宏里写的RGB为255,0,0,我条件格式的字体颜色也是RGB为255,0,0.
我的个性签名
发表于 2022/5/4 15:27:22   
头像 等级:学者
积分:58
财富值:3
身份:普通用户
先把宏看懂。提问题,最好传个附件嘛,这样空口白牙的。
我的个性签名
发表于 2022/5/4 16:55:54   
头像 等级:初学者
积分:5
财富值:1
身份:普通用户

回复:9楼


是你应该多测试一下各种条件下的稳定性,给你的宏提出了问题就说空口白牙,说话真难听!
我的个性签名
发表于 2022/5/4 17:33:29   
头像 等级:学者
积分:58
财富值:3
身份:普通用户

回复:10楼

第一、我说你空口白牙,并不是因为你说我的解答有问题我生气,而是向你建议怎样更好地提问题。这样更方便他人解决你的问题。

第二、用这个宏去解决你的问题是需要你根据你的问题去重新设置参数的,这个我在回答的时候有提到。我也因此建议你要读懂宏,为此我还给你对代码做了注释。

第三、对于他人的帮助,表达应有的感谢,这是最基本的礼貌。提问题要方便解答者,这是很基本的职业素养。

第四、我对我的那句”空口白牙“对你造成的困扰,表示歉意。

我的个性签名
发表于 2022/5/5 20:18:24   
头像 等级:初学者
积分:5
财富值:1
身份:普通用户

回复:11楼

1、首先我对你认真负责的回答也是表示肯定的,所以我将你5楼的回复选择为最佳答案。

2、其次也很感谢你在宏里为我做了注释,我也看懂了这个注释,但是我重新应用了之后,它确实是出现了错误。

3、因为这个宏是你做的,所以你肯定更清楚我上面说的出现了这种错误的原因到底是为什么?

4、我在一开始发布帖子的时候就上传了附件,宏是你帮我做的你也更了解,我想你都有就没有再上传附件,所以我没有空口白牙。

5、我虽然看懂了你的注释知道了你注释的地方怎么调,但是调整后确实是出现了问题,我对VBA不了解不会修改,但是我能发现问题。

6、我在7楼回复的问题我想你肯定是看懂,可能你自信你的宏没有问题是我不懂操作的造成的。

7、再次对您能回复我的帖子标识感谢。

我的个性签名

快速回复

目前不允许游客发表,请 登录 注册 后再发贴。