Excel - 高级排序功能

时间:2017-08-16 19:06:54

标签: function excel-formula excel-2010

我有一个锦标赛电子表格,其中包含“D”列(20到150个条目之间)的名称列表以及每个人分配到的表号(“E”列)。

See here...

在“I”栏中,我有一个荒谬的公式,可以创建每个表格中可用座位数的列表(此信息从一个事件变为另一个事件)。

列“G”是我的问题。我希望运行“E”列的内容,并且只要列“E”中有一个与“I”列的内容匹配的值,就可以给出“D”列的内容。

See here...

这是我的公式,因为它目前位于单元格G3中:

{=IFERROR(INDEX(D$3:D$150,SMALL(IF(E$3:E$150=I3,ROW(E$3:E$150)-ROW(E$3)+1),ROWS(E$3:E3))),"")}

只要“E”列中的值为1,该公式就可以完美地用于“E”列中的所有值。此公式在Google表格中非常有效,但Excel似乎以不同方式处理范围。我试过标准公式和数组公式都没有成功。

非常感谢任何建议。

另外一个注意事项,如果需要我可以使用VBA,但我更喜欢坚持使用功能。

3 个答案:

答案 0 :(得分:0)

enter image description here

对于这个例子,我使用了以下公式:

=INDEX($C$14:$C$25,AGGREGATE(15,6,(ROW($D$14:$D$25)-ROW($D$14)+1)/($D$14:$D$25=H16),COUNTIF($H$16:H16,H16)),1)

您需要调整范围以满足您的需求。

答案 1 :(得分:0)

从我的测试来看,问题似乎是ROWS(E$3:E3)作为SMALL函数的第二个参数。基本上,当你到达第12行的第2个时,你要求小函数得到D中第10个最小的值,在E列中有2个。因为看起来你只想到8个玩家,所以它永远找不到任何东西

尝试将ROWS(E$3:E3)更改为COUNTIF(I$3:I3, I3)

这将计算您在第I列中已经通过了多少1或2,所以当你到达2时,它应该重置并要求第一个最小。

答案 2 :(得分:0)

@Forward Ed。感谢您的输入。这帮助我走上了我需要的道路。

以下是最终为我工作的公式:

{= IFERROR(INDEX(d $ 3:d $ 150 SMALL(IF(E $ 3:E $ 150 = I3,ROW(E $ 3:E $ 150)-MIN(ROW(E $ 3:E $ 150))+ 1) ,J3)),"")}