问题描述
-UPDATED-回答,谢谢所有提供帮助的人。
考虑以下Google电子表格:
A B C D E
1 John | Bob | Sue | Tony
2 h1 2 | 1 | 3 | 2
3 h2 3 | 3 | 4 | 2
4 h3 1 | 2 | 1 | 3
5 h4 2 | 2 | 3 | 1
6 h5 2 | 1 | 1 | 3
7 h6 1 | 2 | 2 | 1
8 h7 1 | 2 | 1 | 3
Team | Player1 | Player 2 | score
1 | John | Sue | ?
2 | Bob | Tony | ?
每个团队都由两个合作伙伴组成,例如约翰和苏。每行包含一个匹配项:团队的得分是每个成员中得分最高的。游戏的团队总得分是比赛得分的总和。
在示例中:
- 团队1:John&Sue。比赛分数:(3,4,1,3,2,1)。总分= 16。
- 团队2:鲍勃和托尼。比赛分数:(2,3)。总分= 18。
另一个例子是两个高尔夫球手组成团队,他们之间的最佳得分是每个洞计算的,最后我们将它们加起来。
可以使用电子表格吗?
解决方法
在Excel中,您可以使用LARGE()函数。这是最简单的选择,但有点冗长。
如果要对一列/行中的前3个值求和:
= large(A1:A10,1),large(A1:A10,2) + large(A1:A10,3)
,
要获得理想的结果,公式变得非常复杂:
=SUMPRODUCT(IF(MMULT((B12=$B$1:$E$1)*$B$2:$E$8,ROW(A1:A4)^0)>MMULT((C12=$B$1:$E$1)*$B$2:$E$8,ROW(A1:A4)^0),(B12=$B$1:$E$1)*$B$2:$E$8,(C12=$B$1:$E$1)*$B$2:$E$8))
但在Excel和GS中均可使用
,在Excel中
如果具有新的动态数组公式LET():
=LET(x,INDEX($B$2:$E$8,MATCH(I2,$B$1:$E$1,0)),y,MATCH(J2,SUMPRODUCT(((x>y)*x)+((y>=x)*(y))))
其他
=SUMPRODUCT(((INDEX($B$2:$E$8,0))>INDEX($B$2:$E$8,0)))*INDEX($B$2:$E$8,0)))+((INDEX($B$2:$E$8,0))>=INDEX($B$2:$E$8,0)))*(INDEX($B$2:$E$8,0)))))
,
以下任何一个公式都将产生16和18的期望总和(在我的计算机上测试):
=ArrayFormula(SUM(IF($B$2:$B$8>$D$2:$D$8,$B$2:$B$8,$D$2:$D$8)))
=SUMPRODUCT(IF($B$2:$B$8>$D$2:$D$8,$D$2:$D$8))
将Bob + Tony调整为B-> C和D-> E。这些公式通过对数组进行运算来起作用。他们对IF
范围中的每个单元格一次评估B2:B8
语句,并生成值数组({3,4,1,3,2,1}
)。然后SUM
或SUMPRODUCT
将这些值相加。必须使用ArrayFormula
来强制SUM
将IF作为数组处理。
可以根据需要从此处构建进一步的自定义。与ArrayFormula
和SUMPRODUCT
一起玩,因为它们的用例比这要强大得多,并且在包括Excel在内的其他电子表格软件中具有类似之处。