【问题标题】:Spreadsheet - Im trying to find the sum of the top n numbers in two columns电子表格 - 我试图找到两列中前 n 个数字的总和
【发布时间】:2020-10-02 20:43:36
【问题描述】:

-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 队:约翰和苏。比赛分数:(3,4,1,3,2,2,1)。总分 = 16。
  • 第 2 队:鲍勃和托尼。比赛分数:(2,3,3,2,3,2,3)。总分 = 18。

另一个例子是两名高尔夫球手作为一个团队工作,他们之间的最好成绩按每个洞计算,最后我们将它们相加。

这可以使用电子表格来完成吗?

【问题讨论】:

  • Excel 和 Google 表格不一样,公式解决方案也会有所不同。请说明您实际使用的软件。

标签: excel google-sheets formula spreadsheet


【解决方案1】:

为了得到想要的结果,公式相当复杂:

=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 中都可以使用

【讨论】:

  • 我又看了一下这个公式,虽然它很复杂,但它完全符合我的要求。非常感谢。 ?
【解决方案2】:

在 Excel 中,您可以使用 LARGE() 函数。这是最简单的选择,但有点冗长。

如果你想对列/行中的前 3 个值求和:

 = large(A1:A10, 1), large(A1:A10, 2) + large(A1:A10, 3)

【讨论】:

  • =SUMPRODUCT(large(A1:A10,{1,2,3}) 短一点
  • 谢谢。抱歉,我没有很好地解释它,也许您阅读了过时的评论。我可以找到最大的一个列,但是我如何找到两个单元格中最大的一个(在同一行但不同的列),然后将其添加到下一个最大的单元格等直到结束。例如。另一个例子是两名高尔夫球手作为一个团队工作,他们之间的最好成绩按每个洞计算,最后我们将这些最好成绩相加。
  • 根据什么是“高分”添加一个新的最大/最小列,然后将该列相加为总数。但是您希望在单个单元格中进行完整计算?
【解决方案3】:

在 Excel 中

如果有新的动态数组公式LET():

=LET(x,INDEX($B$2:$E$8,0,MATCH(I2,$B$1:$E$1,0)),y,INDEX($B$2:$E$8,0,MATCH(J2,$B$1:$E$1,0)),SUMPRODUCT(((x>y)*x)+((y>=x)*(y))))

其他

=SUMPRODUCT(((INDEX($B$2:$E$8,0,MATCH(I2,$B$1:$E$1,0))>INDEX($B$2:$E$8,0,MATCH(J2,$B$1:$E$1,0)))*INDEX($B$2:$E$8,0,MATCH(I2,$B$1:$E$1,0)))+((INDEX($B$2:$E$8,0,MATCH(J2,$B$1:$E$1,0))>=INDEX($B$2:$E$8,0,MATCH(I2,$B$1:$E$1,0)))*(INDEX($B$2:$E$8,0,MATCH(J2,$B$1:$E$1,0)))))

【讨论】:

  • +1 非常好的 Excel 动态版本!似乎有了 TEXTJOIN、LET 和 XLOOKUP 之类的东西,微软终于摆脱了我们不得不永远推出自己的解决方案的常见限制。
【解决方案4】:

以下任一公式都将产生所需的 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,$B$2:$B$8,$D$2:$D$8))

将 Bob + Tony 调整为 B->C 和 D->E。这些公式通过对数组进行操作来工作。他们对B2:B8 范围内的每个单元格评估一次IF 语句并生成一个值数组({3,4,1,3,2,2,1})。然后SUMSUMPRODUCT 将对这些值求和。 ArrayFormula 是强制 SUM 将 IF 作为数组处理的必要条件。

可以根据需要从此处构建进一步的自定义。尝试使用 ArrayFormulaSUMPRODUCT,因为它们的用例比这更强大,并且在包括 Excel 在内的其他电子表格软件中也有相似之处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多