Excel使用一种颜色标准验证公式,其余为正常

时间:2015-07-09 20:56:31

标签: excel vba excel-vba excel-formula excel-2010

如何获得可以执行包含颜色的标准的excel 2010公式?我看到了这个:https://support.microsoft.com/en-us/kb/2815384但它只给了我那个颜色的细胞数。我需要在公式中提供其他标准,或者我需要链接中提供的VBA才能在可见单元格上工作(在我的数据上使用过滤器)。有任何想法吗?我很感激帮助。

以下是链接提供的代码:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

Andrew Weatherly的答案就是你正在寻找的东西。

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

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

Sheet1事件:

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

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

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

CountColors