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

问题描述 投票:1回答:1

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

在规划名单时,我们使用一套简单的彩色单元来填写人们何时进行日班,夜班,不带名册,年假等等。鉴于我们计划有多个站点,我需要快速完成检查该个人是否已在多个站点同时轮班(显然不可能)的公式,因此我们可以轻松识别计划阶段何时发生冲突。公式需要返回一个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样式函数结合起来,只计算当该个人姓名出现在该分配时所着色的单元格数。

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

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

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

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

excel function vba
1个回答
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-Shift-Enter。然后你可以操作返回的数组,例如SUM它。

用法示例:

其中-- 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

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

© www.soinside.com 2019 - 2024. All rights reserved.