【问题标题】:Count occurrences of strings just once per row in Google Sheets在 Google 表格中每行只计算一次字符串的出现次数
【发布时间】:2018-05-31 08:38:41
【问题描述】:

我有需要按“类型”而非实例计数的电子表格数据字符串。

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

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

我借用了一个公式,该公式适用于 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 表格在该公式中没有理解什么。有谁知道要使用的正确表达式,或更有效的方法来获得我需要的准确计数,而行内没有重复会使计数膨胀?

【问题讨论】:

  • 请描述您提供的示例中的行和列的含义。
  • 每一行是对一名学生的教学支持记录。每列 B、C 和 D 可能包含也可能不包含作为教师姓名的字符串。单元格 B1 和 D1 都包含老师的姓名,例如 Smith。林在两个不同的课程中得到史密斯的支持,但我需要计算史密斯支持林、汤姆和苏 = 3 名学生。
  • 我会CONCATENATE 行并使用FINDIFISERROR,为每一行获取01 - 比如=IF(ISERROR(FIND($A$1,CONCAT(A3:D3))),0,1) - 然后可能把它变成一个数组公式。
  • sumproduct 是错误的。偏移量应该使用 ROW($1:$3)-1 或 ROW($2:$4)-2,而不是 ROW($2:$4)-1。
  • 我认为偏移量不会以您想要的方式在 Google 表格中发挥作用。 Mmult 应该同时适用于两者,或者可能有一种特定的谷歌表格方式可能使用拆分/连接/转置 - 不幸的是,它们没有你希望的那么简单。

标签: excel google-sheets row countif


【解决方案1】:

这就是 mmult 方法,它通过查找分配给教师 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),"")))

【讨论】:

  • 我看到了对单元格 E5 的引用,我在其中写入了要搜索的字符串(老师的名字)。我会试试这个。
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2020-03-07
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
相关资源
最近更新 更多