如何获得可以执行包含颜色的标准的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
答案 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))。