自定义VBA函数嵌入COUNTIF语句无法使用的问题求助
问题原因
COUNTIF的第二个参数是值匹配条件,它不会遍历区域内的每个单元格去调用你的GetFillColor函数,而是把GetFillColor()=15当成一个固定值去和单元格内容匹配,这和你判断单元格背景色的需求完全不匹配,所以无法生效。
解决方案
方案1:用SUMPRODUCT配合现有函数
直接用SUMPRODUCT实现计数逻辑,它可以遍历区域内每个单元格并执行自定义函数判断:
=SUMPRODUCT(--(GetFillColor(AC3:AD3)=15))
GetFillColor(AC3:AD3)会对区域内每个单元格单独调用函数,返回一组颜色索引值--用来把布尔值(TRUE/FALSE)转换为1/0- SUMPRODUCT会把所有1累加,得到符合条件的单元格数量
方案2:修改自定义函数支持数组输入(更灵活)
如果需要在更多场景下复用这个函数,可以修改VBA代码,让它支持区域输入并返回数组:
Function GetFillColor(Rng As Range) As Variant Dim arr() As Long Dim cell As Range Dim i As Integer ReDim arr(1 To Rng.Cells.Count) i = 1 For Each cell In Rng arr(i) = cell.Interior.ColorIndex i = i + 1 Next cell ' 单个单元格输入时返回单个值,保留原有兼容性 If Rng.Cells.Count = 1 Then GetFillColor = arr(1) Else GetFillColor = arr End If End Function
修改后,除了用上面的SUMPRODUCT公式,若你使用Excel 365/2021版本,还可以用动态数组公式:
=COUNT(IF(GetFillColor(AC3:AD3)=15,1))
(旧版Excel需按Ctrl+Shift+Enter作为数组公式输入)
内容的提问来源于stack exchange,提问作者BD12
相关产品推荐
相关产品推荐

