Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 如何在谷歌表单中创建SUMPRODUCT,但要以两个向量中的文本为条件?_Google Sheets_Sum_Google Sheets Formula_Array Formulas_Counting - Fatal编程技术网

Google sheets 如何在谷歌表单中创建SUMPRODUCT,但要以两个向量中的文本为条件?

Google sheets 如何在谷歌表单中创建SUMPRODUCT,但要以两个向量中的文本为条件?,google-sheets,sum,google-sheets-formula,array-formulas,counting,Google Sheets,Sum,Google Sheets Formula,Array Formulas,Counting,以下电子表格显示了4名学生的练习提交状态。有4个练习1-4,但其中只有2个是家庭作业,因此评分-他们的名字中有前缀“H”。正确的提交被标记为完成 我试图计算每个学生有多少完整的意见书,这些也是家庭作业。最右边的列是我想要的结果 我试过各种各样的countifs,但都没有成功。我有一个丑陋的解决方案,它使用SUMPRODUCT,但这需要用1替换所有完整的,我不希望再加上一些。我更喜欢谷歌表单解决方案,但excel也可以 用心帮助老师:- 我建议使用mmult,这是从矩阵中获取行总数的标准方法。正如

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

我试图计算每个学生有多少完整的意见书,这些也是家庭作业。最右边的列是我想要的结果

我试过各种各样的countifs,但都没有成功。我有一个丑陋的解决方案,它使用SUMPRODUCT,但这需要用1替换所有完整的,我不希望再加上一些。我更喜欢谷歌表单解决方案,但excel也可以

用心帮助老师:-


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

=ArrayFormula(mmult((A2:D6="complete")*(isnumber(SEARCH("h",A1:D1))),transpose(column(A2:D6))^0))
我已经在GoogleSheets中测试过了,但它也应该在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="","",mmult((Sheet7!A2:Z="complete")*(isnumber(SEARCH("h",Sheet7!A1:Z1))),transpose(column(Sheet7!A2:Z))^0)/countif(Sheet7!A1:Z1,"*h*")))
并将列的格式设置为百分比

编辑2

若要检查标头中是否存在H,但忽略H,请使用“查找”而不是“搜索”,并使用“regexmatch”而不是“countif”:

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

如果您只想包含标题(以H开头),请将regexmatch中的H更改为^H,就像@player0的答案一样。

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

=ArrayFormula(mmult((A2:D6="complete")*(isnumber(SEARCH("h",A1:D1))),transpose(column(A2:D6))^0))
我已经在GoogleSheets中测试过了,但它也应该在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="","",mmult((Sheet7!A2:Z="complete")*(isnumber(SEARCH("h",Sheet7!A1:Z1))),transpose(column(Sheet7!A2:Z))^0)/countif(Sheet7!A1:Z1,"*h*")))
并将列的格式设置为百分比

编辑2

若要检查标头中是否存在H,但忽略H,请使用“查找”而不是“搜索”,并使用“regexmatch”而不是“countif”:

=ArrayFormula(if(Sheet7!A2:A="","",mmult((Sheet7!A2:Z="complete")*(isnumber(find("H",Sheet7!A1:Z1))),transpose(column(Sheet7!A2:Z))^0)/sum(--regexmatch(""&Sheet7!A1:Z1,"H"))))
如果您只想包含标题_以H开头,请将regexmatch中的H更改为^H,如@player0的答案所示。

如果已知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))
更新:

如果已知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))
更新:


谢谢你,player0。这正是问题所在-顺便说一句,我不知道H的位置,这是因为我实时决定哪些练习将作为家庭作业进行,而且-列表一直在增长。有什么想法吗?非常感谢你,player0!谢谢你!!!谢谢你,player0。这正是问题所在-顺便说一句,我不知道H的位置,这是因为我实时决定哪些练习将作为家庭作业进行,而且-列表一直在增长。有什么想法吗?非常感谢你,player0!谢谢你!!!答对了,汤姆!工作起来很有魅力。为了完成这项工作,您能帮助完成以下工作吗?1.学生的数量(即行数)或多或少是固定的,但练习的数量会增加。在您的示例中,是否有一种方法可以自动检测右下角的D6和右上角的D1,这样我就不需要每次手动更改它了?2.实际上,我希望计数列是一个百分比,即显示完整*H/总H,例如,第2行为100,第4行为50。请记住,锻炼的重要性在不断增加。非常感谢!是的,您可以使用比您可能需要的行/列更多的范围,也可以将这些范围设置为间接范围。我等会再看。太好了!你对1的修正有效,我只是把它插入M之外的一列。出于某种原因,另一张当然更干净更好的纸没有起作用。我的数据确实存储在Sheet7中,在calculation选项卡中,我复制了您发布的内容,但得到了-MMULT的矩阵大小不兼容。第一个矩阵24中的列数必须等于第二个矩阵26中的行数。再次感谢大家的帮助!!!当我开始尝试的时候,我也有同样的想法——在某个时候,我删除了Sheet7上的一列,这些列只升到了Y。不过巧合的是,你也在Sheet7上!太好了,非常感谢!好了,一切都好了,准备好明年开始了。顺便说一句,目前,“H”搜索不区分大小写。这意味着演习的名称目前仅为1,2,3,但实际名称不能包含h或将被视为家
工作我该怎么解决?对了,汤姆!工作起来很有魅力。为了完成这项工作,您能帮助完成以下工作吗?1.学生的数量(即行数)或多或少是固定的,但练习的数量会增加。在您的示例中,是否有一种方法可以自动检测右下角的D6和右上角的D1,这样我就不需要每次手动更改它了?2.实际上,我希望计数列是一个百分比,即显示完整*H/总H,例如,第2行为100,第4行为50。请记住,锻炼的重要性在不断增加。非常感谢!是的,您可以使用比您可能需要的行/列更多的范围,也可以将这些范围设置为间接范围。我等会再看。太好了!你对1的修正有效,我只是把它插入M之外的一列。出于某种原因,另一张当然更干净更好的纸没有起作用。我的数据确实存储在Sheet7中,在calculation选项卡中,我复制了您发布的内容,但得到了-MMULT的矩阵大小不兼容。第一个矩阵24中的列数必须等于第二个矩阵26中的行数。再次感谢大家的帮助!!!当我开始尝试的时候,我也有同样的想法——在某个时候,我删除了Sheet7上的一列,这些列只升到了Y。不过巧合的是,你也在Sheet7上!太好了,非常感谢!好了,一切都好了,准备好明年开始了。顺便说一句,目前,“H”搜索不区分大小写。这意味着练习的名称目前仅为1,2,3,但实际名称不能包含h或将被算作家庭作业。我该如何解决这个问题?