0

如果你愿意的话,我有一个简单的表格,上面有 5 个名字和 5 个等级。在另一列中,我使用 LARGE 函数对成绩进行排序。现在有没有办法知道每个“有序”等级的行以获得类似的东西?

White      23        31       5
Red        15        23       1
Green      23        23       3
Blue       18        18       4
Grey       31        15       2

我无法计算的那一列是最后一列!

4

4 回答 4

1

如果你想对这些成绩进行排名,你应该使用 rank() 函数。不大()。

=RANK(D2,$D$2:$D$6,1)

排名示例

于 2013-04-23T14:18:15.360 回答
1

你可以试试这个

=MATCH(LARGE(B1:B5,1),B1:B5,0)

结果是多行...

于 2013-04-23T14:19:15.567 回答
1

在单元格 D1 中放置=INDEX($A$1:$A$5,MATCH(C1,$B$1:$B$5,0))

然后在单元格 D2 中放入=IF(D1<>INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)+MATCH(C2,INDIRECT("$B$"&MATCH(C2,$B$1:$B$5,0)+1&":$B$5"),0)))

Grades当存在重复时,这也将起作用

但我强烈建议使用Sort如下:

前 后

*****另外: ***** 这里是对上述公式的解释。

要获取包含我们要查找的数字(C 列中的数字)的行,您需要使用Match()函数。我们=MATCH(C1,B1:B5,0)输入D1

匹配

这是在做什么:正在寻找 in 中的值C1,这是31 它正在寻找 in Range("B1:B5"),而 0 表示完全匹配。

因此,当寻找匹配时,C1我们31得到 5。这告诉我们 31 在Row 5

现在,要获得Column Aon的值,Row 5我们使用INDEX()如下函数:

我们添加=MATCH(C1,B1:B5,0)D1=INDEX(A1:A5,MATCH(C1,B1:B5,0))

指数

这将寻找Range("A1:A5")Row 5这是因为 =MATCH(C1,B1:B5,0)= 5),结果将是Grey

现在如果我们把这个公式往下拉,我们会发现第一个问题:

问题

这是我们的 2 个问题:

1)  We get an `N/A` error in the last row. 
2)  Although `Green` is only in `Range("A1:A5")` one time we see it twice
    even though it would seem that `White` should be twice.

这些是原因,因为:

1) We need to add `$` to the range that will remain the same so when we drag down
   the formula is won't shift the range. As is the formula in `D5` is
   `=INDEX(A5:A9,MATCH(C5,B5:B9,0))` and we receive the error *because*
   `Range("A5:A9")` does not contain `15`, but the issue is we meant
    to look in `Range("A1:A5")` 

所以我们将公式更改为:=INDEX($A$1:$A$5,MATCH(C1,$B$1:$B$5,0)) 请注意,我们没有在公式中使用$on ,因为我们希望这个值随着我们向下移动而改变。C1

修复一个

但是当它们不应该存在时,我们仍然存在双重值的问题。

因为D1是第一个单元格,我们不会更改其中的公式。因为任何等于最大值的东西都只是与之相关联,我看不出有任何理由说明平局的顺序很重要。

相反,我们将开始D2并输入=IF(D1<>INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)+MATCH(C2,INDIRECT("$B$"&MATCH(C2,$B$1:$B$5,0)+1&":$B$5"),0)))

这样做是检查 的值=INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)) 是否不等于上面行中的值。(作为一个排序列表意味着所有双精度值将在彼此之上)如果它一样,则使用该值,但如果它相同,我们需要做更多的工作。

如果值不相同,我们使用公式INDEX($A$1:$A$5,MATCH(C2,$B$1:$B$5,0)+MATCH(C2,INDIRECT("$B$"&MATCH(C2,$B$1:$B$5,0)+1&":$B$5"),0)))

现在来解释它,我将使用我们的双值示例。在D3我们找到公式:=IF(D2<>INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)),INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)+MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0)))

因为我们知道这INDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0))将等于上面的单元格Whiteif falseINDEX($A$1:$A$5,MATCH(C3,$B$1:$B$5,0)+MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0))

我们知道在这种情况下MATCH(C3,$B$1:$B$5,0)包含第一个实例的行是行,所以我们需要在 Under 行中查找 23 。所以我们使用which is equal to因为我们将 a 添加到第一个匹配or的行中。C323Row 1Row 1MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0)MATCH("23", B2:B4,0)123C3

现在将返回我们2as 的值,该值23在 的第二行中,Range("A2:A5")Red该范围内,如下所示:Row 1BlueRow 3

第 2 行

但我们不希望Row 2我们知道23Green和 相关Green的,Row 3所以我们将最后找到值的行231MATCH(C3,$B$1:$B$5,0))添加到我们当前找到它的行(2)并获取Row 3

于 2013-04-23T17:06:15.093 回答
0

这是基于此链接中概述的方法的公式方法。这种方法的最终布局如下所示。

电子表格布局

我假设有 1 个标题行,我使用 2 个辅助列(D 和 E)。虽然可以将其他行添加到标题中,但表格必须从 A 列开始,以便 E 列中的公式正常工作。

尽管可以通过将辅助列合并到 F 列的公式中来消除辅助列,但我不建议这样做:生成的公式将很难维护。

需要的公式

  Cell C2: =LARGE(B:B,ROW(A2)-ROW($A$1))  [Copy down to bottom of data]

  Cell D2: =MATCH(C2,B:B,0)               [Copy down to bottom of data]

  Cell E2: =D2

  Cell E3: =IF(D3<>D2,D3,E2+MATCH(C3,INDIRECT("B"&(E2+1)&":B"&COUNTA(A:A)),0))
           [Copy down to bottom of data]

  Cell F2: =OFFSET($A$2,E2-ROW($A$2),0)   [Copy down to bottom of data]

答案说明

有四个步骤可以得到答案:

  • 将成绩从最高到最低排序(如您在示例数据中所示)

  • 为已排序的成绩创建行号的部分排序

  • 获取重复成绩的行号

  • 使用该顺序显示每个排序等级的名称

将成绩从高到低排序

成绩排序功能

正如您所做的那样,我的排序使用该LARGE函数,该函数返回范围或数组中的第 n 个最大值。如图所示,LARGE单元格中的函数C2采用 B 列中的成绩。“n”的LARGE计算方式为当前行数减去标题中的行数,在本例中为单元格的 1 行A1。当公式被复制下来时,“n”从 1 到 2 到 3 等等。

部分排序成绩行号

用于获取已排序名称的等级行号的公式,带有重复项

下一步是确定对应于已排序成绩的未排序成绩的行号。

为此,我使用该MATCH函数来查找每个已排序成绩在 B 列中未排序成绩列表中的位置。MATCH接受三个参数——要匹配的值、进行匹配的范围,以及可选的,匹配的类型,值为 0 或 FALSE 表示完全匹配 - 并返回一个索引号,它表示在查找范围内找到匹配项的位置(1 表示匹配范围中的第一行,2 表示第二行, ETC。)。

D2上面显示的单元格公式中,MATCH31 级的函数返回 6,因为 31 位于 B 列的第六行。

单元格的结果D4显示了为什么只能使用此公式获得部分排序。当我们尝试查找第二个成绩为 23 的行时,该公式返回一个值 2,它对应于第一个 23 实例的行。这是因为MATCH将始终返回它找到的第一个匹配 23 ,在第 2 行!

获取重复成绩的正确行号

获得重复成绩的正确行号的公式

下一步是为 D 列中的重复行号获取正确的行引用。完成此操作的公式显示在表 E 列的前三个单元格中。

在 E 栏中必须处理三种情况:

  1. 对于最高等级的第一个(也可能是唯一一个)实例,可以只使用在 cell 中计算的行号D2

  2. 第二种情况处理剩余成绩的行引用的第一个实例。对于这些,可以再次使用在 D 列中计算的行数(通过E 列公式中的语句TRUE分支)。IF例如,在单元格中E2——对应于 23 年级的第一个实例——D3可以使用单元格中的行号。

  3. 最后一种情况是重复成绩的行。在这里,MATCH对于 B 列中的每个重复项,使用一个不包括该成绩的先前匹配项的滑动范围重新计算。例如,对于 C 列中的重复成绩 23,匹配在范围 上B3:B6,而不是在B2:B6D 列计算中使用的范围。

按排序顺序显示名称

显示按等级排序的名称的公式

最后一步很简单:获取与排序等级对应的名称。这里使用了OFFSET函数;它的参数是一个单元格引用以及从该引用中找到所需值的行数和列数。

于 2013-04-24T04:37:09.053 回答