繁体   English   中英

根据细胞的颜色和其他标准对细胞进行计数

[英]Counting cells based on their colour and other criteria

我正在使用Excel中的一些排班功能,其依据是我们的工作人员数量有限,涉及多个站点的班次

名册冲突-Joe Bloggs 4 @ 2014年5月21日的两个站点

在规划花名册时,我们使用一组简单的彩色单元格来填充人们白天上班,夜班,不安排名册,年假等情况。鉴于我们计划有多个地点,我需要快速公式,用于检查该个人是否已在多个地点同时轮班(显然不可能),因此我们可以轻松地确定计划阶段何时存在冲突。 公式需要返回TRUE或值(例如,count> 1表示该人的一项分配),以便我可以使用条件格式或VBA突出显示单元格/行并引起对冲突的注意

我尝试做的是对一些VBA方法着色的单元格进行求和/计数:

Function ISFILLED(MyCell As Range)
    If MyCell.Interior.colorIndex > 0 Then
        Result = True
    Else
        Result = False
    End If
    ISFILLED = Result
End Function

和/或:

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 SUM = True Then
        For Each rCell In rRange
            If rCell.Interior.ColorIndex = lCol Then
                vResult = WorksheetFunction.SUM(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

两者都可以正常工作,但是我无法将其与SUMIFS / COUNTIFS样式功能结合使用,以仅在该人的姓名出现针对该分配的情况下才计算彩色单元格的数量。

如果您从名单中查看示例图片,则可以看到2014年5月21日在站点1站点2上为Joe Bloggs 4分配了班次。 我所追求的基本上是,如果符合条件的个人名字与那些单元格相对,则对行中彩色单元格的数量进行计数 对于此示例,如果

=COUNTIFS(C8:AQ8, "Joe Bloggs 4", C12:AQ12, *Cell is Coloured*)

单元格的颜色无关紧要(因此,第一个功能为ISFILLED更好,因为我不需要填充参考单元格),因为它只是一种感觉检查。

感谢所有帮助/指针,因为它卡住了!

您将无法为此使用SUMIFSCOUNTIFS 您需要遵循以下原则:

Function IsFilledArr(rng As Range) As Variant
    Dim i As Long, j As Long
    Dim v As Variant
    ReDim v(1 To rng.Rows.Count, 1 To rng.Columns.Count)
    For i = 1 To rng.Rows.Count
        For j = 1 To rng.Columns.Count
            v(i, j) = rng.Cells(i, j).Interior.ColorIndex > 0
        Next j
    Next i
    IsFilledArr = v
End Function

此UDF可以称为数组公式,即选择一个单元格范围,在左上角的单元格中键入公式(同时仍选择整个范围),然后按Ctrl - Shift - Enter 然后,您可以对返回的数组进行操作,例如对它SUM

用法示例:

在此处输入图片说明

其中--双负布尔值TRUE / FALSE的值(未累加)转换成1和0(这是)。

我将让您对其进行调整以适合您的特定要求。

编辑:您想要更多:

计算C列中的填充单元数,其中B列中有一个相邻的填充单元-在这种情况下,C4是唯一满足该条件的单元。

这个公式可以解决问题(作为数组公式输入):

=SUM(IF(IsFilledArr(B2:B7)+IsFilledArr(C2:C7)>1,1))

注意使用SUM(IF(...,1))模仿COUNT 处理数组公式时,这就是这样做的方法。

在此处阅读更多信息: http : //www.cpearson.com/excel/ArrayFormulas.aspx

您要求帮助/指针; 希望这足以使您摆脱困境。 您可以采用这种方法来满足您的确切需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM