Excel使用一种颜色标准来标识公式,其余部分正常

我怎样才能得到一个可以做标准,包括颜色的Excel 2010公式? 我看到这个: https : //support.microsoft.com/en-us/kb/2815384,但它只给我这个颜色的单元格的计数。 我需要一个额外的标准在公式中可用,或者我需要链接中提供的VBA,只在可见单元格上工作(在我的数据上使用filter)。 有任何想法吗? 我感谢帮助。

以下是链接提供的代码:

Function CountCcolor(range_data As range, criteria As range) As Long Dim datax As range Dim xcolor As Long xcolor = criteria.Interior.ColorIndex For Each datax In range_data If datax.Interior.ColorIndex = xcolor Then CountCcolor = CountCcolor + 1 End If Next datax End Function 

安德鲁·韦瑟利的答案就是你要找的东西。

我在运行代码时唯一遇到的问题是这行:

if datax.Hidden = false

这成为datax.EntireRow.Hidden = False ,似乎解决的东西。

它也不喜欢更新它应该。

在做一些戳动,我添加了Application.Volatile ,但它似乎并没有更新,当颜色改变或filter的变化。

我不得不添加一个工作表Selectionchange事件,最终得到它更新时,应该(可能太频繁)。

Excel没有“颜色变化”事件,所以我们可以做的最好的select变化时更新(短添加运行Application.Calculate,但听起来像是比它的价值更努力的计时器)。

最终的代码:

 Function CountColors(TheRange As Range, TheColor As Range) As Long Application.Volatile Dim c, color, cellcount color = TheColor.Interior.ColorIndex For Each c In TheRange If c.EntireRow.Hidden = False And c.Interior.ColorIndex = color Then cellcount = cellcount + 1 Next c CountColors = cellcount End Function 

Sheet1事件:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.Calculate End Sub 

第一块代码放在一个模块中(Module1是默认的)。

第二块代码放在工作表对象中(在我的例子中是Sheet1(Sheet1))。

CountColors

那么当您应用自定义函数时,您不希望过滤的数据被发现的问题是您的问题? 因为如果是这样,下面应该修复它:

 Function CountCcolor(range_data As range, criteria As range) As Long Dim datax As range Dim xcolor As Long xcolor = criteria.Interior.ColorIndex For Each datax In range_data If datax.Interior.ColorIndex = xcolor And datax.EntireRow.Hidden = False Then CountCcolor = CountCcolor + 1 End If Next datax End Function