CountIF 在列表的最后一次出现时为真

CountIF true on last occurence for list

我正在列出参与两部分评估的人员,并希望跟踪总体分析结果,了解有多少人通过了评估,有多少人未通过评估。

我的工作表看起来像这样

Date StudentID Part 1 or 2? Pass?
01/01/2022 George 1 True
01/01/2022 Brandon 1 True
01/01/2022 Daniel 1 False
01/01/2022 Tahlia 1 True
01/01/2022 Jane 1 True
02/01/2022 George 2 True
02/01/2022 Brandon 2 False
02/01/2022 Tahlia 2 True
02/01/2022 Jane 2 True

在这种情况下,我们知道有 3 人通过了评估,另外 2 人未通过评估。

我知道我可以找到每个学生的最后一个条目,并使用

检查他们是通过还是失败
=LOOKUP(2,1/($B:$B="George"),$D:$D)

但这会使用额外的列并占用不必要的空间 space。 (我知道我可以隐藏列)我想做的是查找确实通过的用户并计算他们。

所以...我的问题是,如何结合 =CountIF()=Lookup() 来统计有多少学生通过了考试?

如果您的实际情况是您只需要计算通过第 2 阶段的人数,那么您可以使用下面 C12 中的公式

=SUM(--((C2:C10)*(D2:D10)=2))

(如果您使用的是 Excel 2019 年或更早版本,则必须输入 array formula

如果您有权访问 UNIQUE 函数,则可以使用以下公式计算每个学生的 FALSE 人数:

=COUNTIFS(Pass?,FALSE,StudentID,UNIQUE(StudentID))
'i.e. {0;1;1;0;0}

要获得通过的那些,请使用 SUMPRODUCT:

=SUMPRODUCT(--(COUNTIFS(Pass?,FALSE,StudentID,UNIQUE(StudentID))=0))
'i.e. =SUMPRODUCT(--({0;1;1;0;0}=0)) => 3

更新:解释器公式

在这个公式中,UNIQUE(StudentID) 为您提供了一个数组,其中包含按出现顺序排列的唯一学生: {"George";"Brandon";"Daniel";"Tahlia";"Jane"}

接下来,COUNTIFS(Pass?,FALSE,StudentID,UNIQUE(StudentID) 获取每个学生的 FALSE 的计数,也是一个数组:{0;1;1;0;0}。 IE。 “George”、“Tahlia”和“Jane”为零 FALSE,“Brandon”和“Daniel”为 1 FALSE

最后,我们只是想做一个 COUNTIFS 来计算所有零。但是,结果在数组中,COUNTIF(S) 不适用于数组。这就是我们将 SUMPRODUCT 与“double-negative”(双一元)运算一起使用的原因。此操作将 TRUE/FALSE 强制转换为 1/0,因此我们得到 --({0;1;1;0;0}=0) => {TRUE,FALSE,FALSE,TRUE,TRUE} => {1,0,0,1,1}。现在,SUMPRODUCT 将这个最终数组相乘并求和,得出 3。

(N.B。在当前示例中,最终数组只是输入数组的倒数。这是因为没有学生有超过一个 FALSE。但是如果学生有 FALSE 两次,最后的数组不会不同。)