如何解决如何在Google表格中执行SUMPRODUCT,但要以两个向量中的文本为条件?
以下电子表格显示了4名学生的练习提交状态。有4个练习(1-4),但其中只有2个是家庭作业(因此已评分)-它们的名称前带有“ H”前缀。正确的提交被标记为“完成”。
我想为每个学生计算他有多少“完整”的提交材料,这也是家庭作业。最右边的列是我想要的结果。
我尝试了各种各样的事态,但无法做到。我有一个使用SUMPRODUCT的丑陋解决方案,但是这需要用“ 1”(我宁愿不要)+一些替换所有“完整”。我更喜欢Google表格解决方案,但是excel也可以工作...
放心,帮助老师:-)
解决方法
我建议使用mmult,这是从矩阵获取行总数的标准方法。如您所述,第一步是将每个包含“ complete”的单元格转换为1,然后检查标头中是否存在字母H。
=ArrayFormula(mmult((A2:D6="complete")*(isnumber(SEARCH("h",A1:D1))),transpose(column(A2:D6))^0))
我已经在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")))
如果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))
更新:
=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%"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。