基于VBA实现单元格颜色+员工姓名双条件统计转诊状态数量
扩展VBA代码实现按员工+颜色统计转诊数
1. 新增双重条件统计的自定义函数
你需要一个能同时匹配员工姓名和单元格颜色的自定义函数,直接把这段代码添加到你的VBA模块里即可(可以保留原有的单颜色统计函数,不冲突):
Public Function CountByEmployeeAndColor(nameRng As Range, targetName As String, colorRng As Range, Red As Long, Green As Long, Blue As Long) As Long Dim lCount As Long Dim i As Long ' 校验姓名列和颜色列行数是否一致,避免统计出错 If nameRng.Rows.Count <> colorRng.Rows.Count Then CountByEmployeeAndColor = CVErr(xlErrRef) Exit Function End If For i = 1 To nameRng.Rows.Count ' 同时匹配目标姓名和指定颜色 If nameRng.Cells(i, 1).Value = targetName And colorRng.Cells(i, 1).Interior.Color = RGB(Red, Green, Blue) Then lCount = lCount + 1 End If Next i CountByEmployeeAndColor = lCount End Function
2. 在Excel中调用函数的方法
假设你的数据布局是:
- A列:员工姓名(数据范围比如
A2:A100) - B列:带颜色的转诊状态(数据范围
B2:B100) - 统计表从D列开始:D列是要统计的员工姓名,E、G、I列分别对应active、maybe、inactive的统计结果
举个例子,统计D2单元格员工的**active状态(红色,RGB值255,0,0)**数量,在E2输入:=CountByEmployeeAndColor($A$2:$A$100, D2, $B$2:$B$100, 255, 0, 0)
下拉填充E列,就能得到所有员工的active状态数量。
同理,maybe状态(比如黄色RGB(255,255,0))就在G2输入:=CountByEmployeeAndColor($A$2:$A$100, D2, $B$2:$B$100, 255, 255, 0)
inactive状态(比如灰色RGB(192,192,192))则用对应的RGB参数替换即可。
3. 保留颜色编码的小技巧
要让统计单元格和状态颜色对应,不用文字说明也能直观区分:
- 选中E列(active统计列),打开「条件格式」→「新建规则」→「使用公式确定要设置格式的单元格」
- 输入公式
=E2>0,点击「格式」设置单元格填充色为红色,这样有统计数据的单元格就会显示对应状态的颜色。 - 重复这个操作给maybe、inactive列设置对应颜色。
4. 实用提示
- 如果你不确定状态颜色的准确RGB值:选中对应颜色的单元格,打开VBA编辑器按
Ctrl+G调出立即窗口,输入?ActiveCell.Interior.Color回车,得到的十进制数可以直接替换公式里的RGB(Red,Green,Blue) - 每次修改单元格颜色后,按
F9刷新计算;如果想要自动刷新,在函数开头加一行Application.Volatile True,这样颜色变化时公式会自动重算。
内容的提问来源于stack exchange,提问作者Colin Graham
相关产品推荐
相关产品推荐

