如果你愿意,我有一个简单的表,有5个名字和5个等级。 在另一列中,我使用LARGE函数订购等级。 现在有没有办法知道每个“有序”等级的行,以获得类似的东西?
White 23 31 5
Red 15 23 1
Green 23 23 3
Blue 18 18 4
Grey 31 15 2
我无法计算的列是最后一列!
答案 0 :(得分:1)
如果要对这些成绩进行排名,则应使用rank()函数。不大()。
=RANK(D2,$D$2:$D$6,1)
答案 1 :(得分:1)
你可以试试这个
=MATCH(LARGE(B1:B5,1),B1:B5,0)
结果是一些行...
答案 2 :(得分:1)
在单元格D1中放置=INDEX($A$1:$A$5,MATCH(C1,$B$1:$B$5,0))
然后在Cell 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
:
这是做什么的:我正在寻找C1
中的值,这是31
它正在寻找Range("B1:B5")
,0代表完全匹配。
因此,在查找与C1
或31
的匹配时,我们会得到5.这告诉我们31位于Row 5
现在,为了获得Column A
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
现在,如果我们拖下这个公式,我们会发现第一个问题:
以下是我们的两个问题:
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))
请注意,我们不会在公式中$
使用C1
因为我们 WANT 此值会随着我们向下移动而改变。
但是,当它们不应该存在时,我们仍然会遇到双值问题。
因为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))
的价值
不等于上面一行中的值。 (作为一个排序列表意味着所有双重值都将在彼此之上)并且如果它是 NOT 相同然后使用该值,但如果它是相同的我们需要做更多的工作。
如果值不相同,我们使用公式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))
将等于上面的单元格(White
),并且我们已经了解if if的工作方式,我将重点关注if false
值of: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))
我们知道MATCH(C3,$B$1:$B$5,0)
是包含C3
的第一个实例的行23
,行是Row 1
所以我们需要在行Row 1
下的行。因此,我们使用等于MATCH(C3,INDIRECT("$B$"&MATCH(C3,$B$1:$B$5,0)+1&":$B$5"),0)
的{{1}},因为我们正在为MATCH("23", B2:B4,0)
或1
的第一个匹配的行添加23
。
现在将返回C3
的值,因为值2
位于23
的第二行,Range("A2:A5")
位于Red
中,如下所示Row 1
范围内的Blue
:
但我们不希望Row 3
我们知道Row 2
与23
相关,而Green
位于Green
所以我们添加了行最后找到值Row 3
(23
或1
)到我们当前找到的行(MATCH(C3,$B$1:$B$5,0)
)并获取2
。
答案 3 :(得分:0)
以下是基于this link中概述的方法的公式方法。这种方法的最终布局如下所示。
我假设有1个标题行,我使用2个辅助列(D&amp; 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列中的等级。LARGE
的“n”计算为当前行数减去标题中的行数,在这种情况下,单元格A1
为1行。当公式被复制下来时,“n”从1进展到2到3,等等。
部分订购成绩行号
下一步是确定与排序等级对应的未排序等级的行号。
为此,我使用MATCH
函数查找每个排序等级位于B列未排序等级列表的位置。MATCH
有三个参数 - 要匹配的值,匹配的范围,以及可选的匹配类型,精确匹配的值为0或FALSE - 并返回一个索引号,表示在查找范围内找到匹配的位置(1表示匹配范围中的第一行,第二行中的第2行等。)。
在上面显示的单元格D2
的公式中,31级的MATCH
函数返回6,因为31位于B列的第6行。
单元格D4
的结果显示了为什么只能使用此公式获得部分排序。当我们尝试为23的等级的第二个实例查找行时,公式返回值2,这对应于第一个23的实例的行。这是因为MATCH
将始终返回第一个匹配23它找到,这是在第2行!
获取重复成绩的正确行号
下一步是为D列中的重复行号获取正确的行引用。表中E列的前三个单元格显示了完成此操作的公式。
E列中有三种情况需要处理:
对于最高等级的第一个(也可能是唯一的)实例,可以只使用在单元格D2
中计算的行号。
第二种情况涉及剩余成绩的行引用的第一个实例。对于这些,可以再次使用在列D中计算的行数(通过E列公式中TRUE
语句的IF
分支)。例如,在单元格E2
中 - 对应于23年级的第一个实例 - 可以使用单元格D3
中的行号。
MATCH
。例如,对于C列中重复的等级23,匹配范围为B3:B6
,而不是D列计算中使用的B2:B6
范围。按排序顺序显示名称
最后一步是直截了当:获取与排序等级相对应的名称。这里使用OFFSET函数;它的参数是一个单元格引用,以及该引用中要找到所需值的行数和列数。