如何在Google表格中执行SUMPRODUCT,但要以两个向量中的文本为条件?

问题描述

以下电子表格显示了4名学生的练习提交状态。有4个练习(1-4),但其中只有2个是家庭作业(因此已评分)-它们的名称前带有“ H”前缀。正确的提交被标记为“完成”。

我想为每个学生计算他有多少“完整”的提交材料,这也是家庭作业。最右边的列是我想要的结果。

我尝试了各种各样的事态,但无法做到。我有一个使用SUMPRODUCT的丑陋解决方案,但是这需要用“ 1”(我宁愿不要)+一些替换所有“完整”。我更喜欢Google表格解决方案,但是excel也可以工作...

放心,帮助老师:-)

spreadsheet

解决方法

我建议使用mmult,这是从矩阵获取行总数的标准方法。如您所述,第一步是将每个包含“ complete”的单元格转换为1,然后检查标头中是否存在字母H。

=ArrayFormula(mmult((A2:D6="complete")*(isnumber(SEARCH("h",A1:D1))),transpose(column(A2:D6))^0))

enter image description here

我已经在Google表格中对其进行了测试,但是它也应该在Excel中也可以使用。

编辑

(1)使范围适应变化的最简单方法是对列数设置一些上限,并使引用成为全列,例如

=ArrayFormula(if(A2:A="","",mmult((A2:M="complete")*(isnumber(SEARCH("h",A1:M1))),transpose(column(A2:M))^0)))

您可能希望将总数移到另一张纸上:

=ArrayFormula(if(Sheet7!A2:A="",mmult((Sheet7!A2:Z="complete")*(isnumber(SEARCH("h",Sheet7!A1:Z1))),transpose(column(Sheet7!A2:Z))^0)))

(2)要获取百分比值,可以使用countif:

=ArrayFormula(if(Sheet7!A2:A="",transpose(column(Sheet7!A2:Z))^0)/countif(Sheet7!A1:Z1,"*h*")))

并将列格式设置为百分比。

编辑2

要检查标头中是否存在H但忽略h,请使用Find代替Search,并使用regexmatch代替countif:

=ArrayFormula(if(Sheet7!A2:A="",mmult((Sheet7!A2:Z="complete")*(isnumber(find("H",transpose(column(Sheet7!A2:Z))^0)/sum(--regexmatch(""&Sheet7!A1:Z1,"H"))))

如果只想包含标头_starting_with H,请像在@ player0的答案中一样,将正则表达式中的“ H”更改为“ ^ H”。

,

如果知道 H 列的位置,则可以执行以下操作:

=INDEX(IF(A2:A="",ADD(D2:D="complete",E2:E="complete")))

enter image description here


如果H的列数和位置未知:

=INDEX(MMULT((INDIRECT("A2:"&ADDRESS(COUNTA($A:$A),COLUMN()-1))="complete")
  *(REGEXMATCH(UPPER(INDIRECT("A1:"&ADDRESS(1,COLUMN()-1))),"^H.*")),ROW(INDIRECT("A1:"&COLUMN()-1))^0))

enter image description here

更新

=INDEX(TEXT(MMULT((INDIRECT("A2:"&ADDRESS(COUNTA($A:$A),ROW(INDIRECT("A1:"&COLUMN()-1))^0)/
 SUM(1*REGEXMATCH(UPPER(INDIRECT("A1:"&ADDRESS(1,"0.00%"))

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...