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

时间:2014-05-27 06:32:27

标签: excel function vba

我正在研究Excel中的一些排班功能,其基础是我们的人数有限,需要在工作中填写,涵盖多个站点的轮班

Roster Conflict - Joe Bloggs 4 @ two sites on 21/5/2014

在规划名单时,我们会使用一套简单的彩色单元格来填补人们在日班,夜班,没有名册,年假等时的情况。鉴于我们计划有多个站点,我需要有一个快速的公式,检查该个人是否已在多个站点同时轮班(显然不可能),所以我们可以很容易地确定计划阶段何时发生冲突。公式需要返回一个TRUE或值(例如,count> 1表示该人的多个赋值),这样我就可以使用条件格式或VBA来突出显示一个单元格/行并引起对冲突的注意< / p>

我尝试做的是对使用几种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样式功能结合起来,只计算当该个人姓名出现在该分配时所着色的单元格数。

如果您查看名单中的示例图片,可以看到 Joe Bloggs 4 已在网站1 分配了一个班次2014年5月21日的网站2 。如果符合条件的个人姓名与这些单元格相对应,那么我所追求的基本上是计算行上有色单元格的数量。对于这个例子,如果是

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

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

感谢任何帮助/指针,因为它,我被卡住了!

1 个答案:

答案 0 :(得分:0)

您将无法使用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 - - 输入。然后你可以操作返回的数组,例如SUM它。

使用示例:

enter image description here

其中-- double减去将布尔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

你问了帮助/指针;这应该足以让你脱离困境。您可以调整此方法以满足您的确切需求。