我如何编写一个宏来遍历一系列单元格并按颜色计算内容,而不计算合并单元格组内的每个单独的单元格。
例如,在图片中,我想要一个宏返回 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
该函数有两个参数:第一个是要检查的单元格范围,第二个是颜色模式(可以是引用、地址文本或数字颜色值)。单元格的颜色来自基本格式,不是条件性的。