【发布时间】:2014-07-07 02:49:11
【问题描述】:
我正在寻找一种方法来计算我的范围内有多少行(跨越两列)符合以下标准:行中的一个单元格具有特定的背景颜色,而同一行中的另一个单元格具有特定的背景颜色不同的特定背景颜色。
就目前情况而言,我曾尝试在 Countifs 中使用 colorfunction,但他们似乎给出了错误的答案。有什么建议吗?
【问题讨论】:
标签: excel colors excel-formula array-formulas
我正在寻找一种方法来计算我的范围内有多少行(跨越两列)符合以下标准:行中的一个单元格具有特定的背景颜色,而同一行中的另一个单元格具有特定的背景颜色不同的特定背景颜色。
就目前情况而言,我曾尝试在 Countifs 中使用 colorfunction,但他们似乎给出了错误的答案。有什么建议吗?
【问题讨论】:
标签: excel colors excel-formula array-formulas
重启...
对于两种颜色的检查,对于我的功能,您有:
Public Function CountColor(Sel As Range, Col As Long, Col1 As Long) As Long
Application.Volatile
Dim i As Long
i = 0
For Each xx In Sel
If (xx.Interior.Color = Col) And (xx.Offset(0, 1).Interior.Color = Col1) Then i = i + 1
Next
CountColor = i
End Function
如果你想用颜色引用一个单元格:
Public Function CountColorR(Sel As Range, ColR As Range, ColR1 As Range) As Long
Application.Volatile
Dim i, Col, Col1 As Long
Col = ColR.Interior.Color
Col1 = ColR1.Interior.Color
i = 0
For Each xx In Sel
If (xx.Interior.Color = Col) And (xx.Offset(0, 1).Interior.Color = Col1) Then i = i + 1
Next
CountColorR = i
End Function
在您的函数中,您需要添加代码的 if (...) 和 (...) 部分以及颜色部分...
在您的函数中,我不明白 SUM 的部分/计数...
【讨论】:
直接使用 EXCEL 函数,我认为这是不可能的,因为您没有返回内部颜色的函数。
使用 VBA(模块内部):
Public Function CountColor(Sel As Range, Col As Long) As Long
Dim i As Long
i = 0
For Each xx In Sel
If xx.Interior.Color = Col Then i = i + 1
Next
CountColor = i
End Function
你需要知道颜色...使用函数:
Public Function InnerColor(Sel As Range) As Long
InnerColor = Sel.Interior.Color
End Function
使用名称:定义名称 -> 颜色:
=GET.CELL(63;OFFSET(INDIRECT("RC";FALSE);0;-1))
你可以有一个间接的参考。不要与 Countif 合作。在这样的情况下:
使用之前定义的名称,您可以创建一个列:
=IF(color>0;1;0)
还有一个简单的:
=SUM(K5:K16)
获得黄色单元格编号。
如果您不进行重新计算 (F9),请不要立即工作(也包括 VBA)...
【讨论】:
Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
If Count = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.Count(rCell) + vResult
End If
Next rCell
Else
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell
End If
ColorFunction = vResult
End Function
【讨论】: