【问题标题】:Get index of second match in Google Sheets在 Google 表格中获取第二个匹配项的索引
【发布时间】:2021-06-18 17:24:32
【问题描述】:

在由姓名和分数组成的表格中,我正在尝试构建一个表格来显示得分最高的人的姓名。 这样做:

  • 我对分数进行排序
  • 我得到最大值的索引
  • 我用给定的索引偏移了名称列表

当我想得到第二大值时,我只需要在第2步得到第二大值的索引。

如果两个值的最大值并列,则会出现问题,因为 MATCH() 总是会给我找到的第一个值的索引。

我想确定最大值的索引,然后从用于确定第二大值的范围中排除该索引,但由于范围长度可能不同,我无法实现。

我也想过使用一个函数或脚本来返回满足某个范围内条件的第 N 个索引,但我没有找到任何方法。

Image

这是一个示例电子表格 https://docs.google.com/spreadsheets/d/1RrUpAjbMBze9L5OqxdyEWBnYXq98LtohdgROF8s68FI/edit?usp=sharing

【问题讨论】:

标签: google-sheets indexing match


【解决方案1】:

一种方法是添加一个列号并对其以及分数进行排序,然后取列表中的第二个元素:

=ArrayFormula(index(sort(transpose({B1:F3;column(B1:F3)}),3,false,4,true),2,1))

请注意,标题(玩家姓名)与他们的分数一起排序。

编辑

实际上在GS中排序是stable sort(换句话说,根据文档'范围仅按指定列排序,其他列按它们最初出现的顺序返回')所以这就足够了:

=ArrayFormula(index(sort(transpose(B1:F3),3,false),2,1))

【讨论】:

  • 意识到 Google 表格排序是一种稳定的排序方式(以原始顺序保留关系),因此不需要按列进行额外排序 - 将更新我的答案。
  • 感谢您的回答,这正是我所需要的。 ArrayFormula 有必要吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多