在Google表格中每行只计算一次字符串的出现次数

时间:2018-05-31 08:38:42

标签: excel google-sheets row countif

我的电子表格数据字符串需要按“类型”计算,而不是实例。

   A   B C D
 1 Lin 1 2 1
 2 Tom 1 4 2
 3 Sue 3 1 4

分配给教师1的学生的正确数额是3,而不是4.教师1在课程B中遇到Lin,D与计数无关。

我借用了一个在Excel中运行但不在Google表格中的公式,我和其他人需要保留和操纵数据。

F5=SUMPRODUCT(SIGN(COUNTIF(OFFSET(B$2:D$2, ROW($2:$4)-1, 0), E5)))

  A   B C D E 
2 Lin 1 2 1
3 Tom 1 4 2
4 Sue 3 1 4
5           1 [exact string being searched for, ie a teacher name]

我不知道Google表格在该公式中没有理解的内容。有没有人知道要使用的正确表达式,或者是一种更有效的方法来获得我需要的准确计数,而不会在计算数量的行中重复?

1 个答案:

答案 0 :(得分:1)

因此,这是一种愚蠢的方式,通过查找分配给教师1等的学生的行总数,然后查看总数大于0的总数。

=ArrayFormula(sum(--(mmult(n(B2:D4=E5),transpose(column(B2:D4)))>0)))

=ArrayFormula(sum(sign(mmult(n(B2:D4=E5),transpose(column(B2:D4))))))

如果在没有ArrayFormula包装的情况下作为数组公式输入,也适用于Excel。

特定的Google表格可能很短

=ArrayFormula(COUNTUNIQUE((B2:D4=E5)*row(B2:D4)))-1

计算包含匹配项的唯一行。

注意 - 我在上面的最后一个公式中减去1,因为我假设至少有一个零(不匹配)应该被忽略。如果所有班级的所有学生都被分配到同一位教师,那么这将失败,因此你有一个所有1的矩阵(例如)。这在理论上更正确:

=ArrayFormula(COUNTUNIQUE(if(B2:D4=E5,row(B2:D4),"")))