Excel 宏按颜色计数单元格并且不将合并的单元格计为超过 1 个

Excel 宏按颜色计数单元格并且不将合并的单元格计为超过 1 个

我如何编写一个宏来遍历一系列单元格并按颜色计算内容,而不计算合并单元格组内的每个单独的单元格。在此处输入图片描述

例如,在图片中,我想要一个宏返回 2 个黄色和 3 个绿色的计数,但我编写的宏返回 8 个黄色的计数,因为它将 7 个合并的黄色单元格视为单独的单元格.....

答案1

呃。本示例中有两种不良做法您应该避免:使用颜色编码单元格来传达含义,以及合并单元格。不要。千万不要。使用不同的列来确定状态或类别值,然后您可以使用条件格式根据该状态或类别值设置单元格颜色。并且您可以使用简单的工作表公式来按状态或类别执行计数。

合并单元格带来的麻烦比阿司匹林还多。千万不要合并单元格。它们会导致选择问题,而且正如您所注意到的,还会导致 VBA 中的逻辑问题。不要合并,而是使用工作表公式进行简单的计数。合并单元格的“需要”始终可以通过适当的数据架构和工作表结构来克服。

答案2

我完全同意@teylyn的警告,但如果这样的解决方案有一些非常合理的理由,那么您可以使用这样的功能,例如。

Function ColorCount(rng As Range, pat) As Long
    Dim cell As Range, cnt As Long
    Select Case TypeName(pat)
        Case "Range": pat = pat.Interior.Color
        Case "String": pat = Range(pat).Interior.Color
    End Select
    For Each cell In rng
        If cell.Address = cell.MergeArea(1).Address And _
            cell.Interior.Color = pat Then
            cnt = cnt + 1
        End If
    Next cell
    ColorCount = cnt
End Function

该函数有两个参数:第一个是要检查的单元格范围,第二个是颜色模式(可以是引用、地址文本或数字颜色值)。单元格的颜色来自基本格式,不是条件性的。

颜色数量

相关内容