2015-07-09 225 views
1

如何获得一个可以完成包含颜色标识标准的Excel 2010公式?我看到这个:https://support.microsoft.com/en-us/kb/2815384,但它只给我这种颜色的细胞数量。我需要在公式中提供额外的条件,或者我需要链接中提供的VBA只能在可见单元格上工作(在我的数据上使用过滤器)。有任何想法吗?我很感激帮助。Excel Countifs公式以一种颜色标准和其余的正常

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 
+0

我给你加了一个答案。 – user1274820

回答

1

安德鲁韦瑟利的答案就是关于你在找什么。

我有自己的运行代码时有问题,唯一的一点是这一行:

if datax.Hidden = false

这将成为datax.EntireRow.Hidden = False这似乎解决的事情。

它也不喜欢更新它应该。

在做一些戳动操作时,我添加了Application.Volatile,但当颜色改变或过滤器更改时似乎没有更新。

我不得不添加一个Worksheet SelectionChange事件,最终在它应该更新时(可能太频繁)。

Excel没有“颜色变化”事件,所以我们可以做的最好的是在选择更改时更新(缺少添加运行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 

Sheet 1中事件:

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

第一块的代码变为一个模块(模块1是默认值)。

第二段代码放在工作表对象中(在我的示例中为Sheet1(Sheet1))。

CountColors

+2

完美。像迄今为止的魅力一样工作。非常感激。 – user4584837

1

所以是你的问题,你当你申请自定义功能不想被发现的滤波的数据:

这里由链路提供的代码?因为如果是这样,下面应该修复它:

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 
+0

嘿安德鲁,作为一个建议,以免影响你的声望评分,你应该在原始问题下使用“添加评论”,而不是在底部的表单中放置评论。此响应将被标记为无用,因为它不是实际的答案。希望这可以帮助你在未来。 – nbayly

+0

我试着首先添加评论,但它不会让我,因为我没有50声望大声笑 –

+0

哈哈,或者我应该给你多一点时间:)。 Regards – nbayly