在VBA中使用CountIf函数统计可见单元格

10
我正在尝试在VBA中使用 CountIf 函数,在可见单元格上计算所有可见单元格的 yes ,有25个,但是我收到错误:

无法获取 WorksheetFunction 类的 CountIf 属性

并且它突出显示了 returnCount ,不确定 myrange 是否也有错误,请帮忙解决。

Set myrange = _
Range("D4",Range("D4").End(xlDown)).SpecialCells(xlCellTypeVisible)

returnCount = WorksheetFunction.CountIf(myrange, "yes")

您正在尝试在可能不连续的单元格范围上使用COUNTIF函数。 - QHarr
应用程序中的cointif返回类型不匹配。 - Gandalfrandalf
是的,我也一样,抱歉我的立即窗口里有一个数字剩下了,所以以为已经给出计数。 - Nathan_Sav
1个回答

16

COUNTIF函数不支持非连续或多区域范围。因此需要对该范围中的区域进行迭代。

Dim myrange As Range
Dim ar As Range
Set myrange = _
Range("D4", Range("D4").End(xlDown)).SpecialCells(xlCellTypeVisible)
For Each ar In myrange.Areas
    returncount = returncount + Application.WorksheetFunction.CountIf(ar, "yes")
Next ar

不错的解决方法,我没有考虑过这个--总是忘记了Areas可以有多么有用。 - CallumDA
非常好的使用了“区域(Areas)”来最小化循环时间。 - Gary's Student
3
我之前不知道有关于Areas的信息,我需要阅读一些相关内容。+1 - QHarr
@Scott Craner,这里的问题是因为SpecialCells返回多个范围,而COUNTIF不支持。因此说“COUNTIF不喜欢非连续范围”是不准确的,因为提供连续范围也会引发错误:WorksheetFunction.CountIf(Range("A1:A5,A6:A10"), "yes") - michael
1
@michael 但“特殊单元格”将所有相邻可见单元格分组成区域。因此,在这种情况下,它们不是相邻的,因此对于此特定目的,它起作用了。但是,是的,您是正确的,COUNTIFS不喜欢范围区域中的多个范围。 - Scott Craner
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接