求可按相邻区域特定文本统计指定颜色单元格数量的VBA代码
修正后的条件颜色统计VBA函数
原代码存在几个导致运行异常的问题:
- 条件区域的单元格引用逻辑错误,直接从第1列开始遍历,未匹配传入的
rCondRange实际位置 - 统计变量
vResult未初始化,首次累加时会因类型错误报错 - 变量类型定义不严谨,可能引发数值溢出或类型不匹配
以下是修正后的完整代码:
Function ConditionalColorFunction(rColor As Range, rColoredRange As Range, StrCond As String, rCondRange As Range) As Long Dim rColoredCell As Range Dim lCol As Long Dim condRow As Range Dim vResult As Long ' 定义为Long类型,避免类型错误 lCol = rColor.Interior.Color vResult = 0 ' 初始化统计值为0 For Each rColoredCell In rColoredRange ' 检查当前单元格颜色是否匹配指定颜色 If rColoredCell.Interior.Color = lCol Then ' 获取条件区域中与当前单元格同行的区域 Set condRow = Intersect(rCondRange, rColoredCell.EntireRow) ' 检查该行条件区域是否存在指定文本 If Not condRow Is Nothing Then If Application.CountIf(condRow, StrCond) > 0 Then vResult = vResult + 1 End If End If End If Next rColoredCell ConditionalColorFunction = vResult End Function
参数说明
rColor:单个单元格,用于指定要匹配的背景色(取该单元格的填充色)rColoredRange:需要统计的目标单元格区域(遍历该区域检查颜色)StrCond:需要匹配的特定文本内容rCondRange:存放条件文本的区域(与目标区域的行一一对应)
使用示例
在Excel单元格中输入公式:
=ConditionalColorFunction($A$1, $C:$C, "已完成", $B:$B)
该公式的作用是:统计C列中,背景色与A1单元格相同,且同一行B列包含"已完成"文本的单元格总数。
内容的提问来源于stack exchange,提问作者Robert Buchanan
相关产品推荐
相关产品推荐

