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
两次,最后的数组不会不同。)
我正在列出参与两部分评估的人员,并希望跟踪总体分析结果,了解有多少人通过了评估,有多少人未通过评估。
我的工作表看起来像这样
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
两次,最后的数组不会不同。)