查找前2个得分并从行数组中返回相应的相邻值

时间:2019-05-08 09:54:09

标签: excel excel-formula

我在相邻单元格中有一排带有文本格式的分数和层信息的值。我想找到最高分并返回带有文本信息的相邻单元格,并类似地找到与相邻单元格信息第二高的得分,请注意前两个得分可能具有相同的得分,但它们应具有不同的文本值。

我尝试过索引和匹配公式。

String sDate = "10-11-2017";
String eDate = "16-08-2018";
Date startDate = new SimpleDateFormat(MsmConstants.DATE_FORMAT).parse(sDate);
Date endDate = new SimpleDateFormat(MsmConstants.DATE_FORMAT).parse(eDate);
long difference = startDate.getTime() - endDate.getTime();
return Math.abs(difference / (1000 * 60 * 60 * 24));

示例数据布局

=INDEX(Table2[@],MATCH(MAX(Table2[@]),Table2[@],0)+1)

2 个答案:

答案 0 :(得分:1)

我相信这可能比您最初预期的要难一些。这是我的步骤:

样本数据:

enter image description here

E1中的公式:

=LARGE(TestTable[ColumnA],ROW())

D1中的公式:

{=INDEX(TestTable[ColumnB],SMALL(IF(TestTable[ColumnA]=E1,ROW(TestTable[ColumnA])-ROW(A$1)),COUNTIF(E$1:E1,E1)))}

拖动两个公式。请注意,最后一个是数组,需要通过 Ctrl Shift Enter

输入

我很好奇自己是否还有其他更简单的方法!

答案 1 :(得分:1)

已更新答案以反映数据布局

不使用数组公式而是使用执行数组运算的公式,就可以使用聚合。其过程与JvdV回答基本相同,但是使用不同的公式。

单元格引用基于以下屏幕快照中的信息,请对其进行调整以适合您的需求。

要获得最高分数,可以使用AGGREGATE使用等式14或15从排序列表中提取特定值,这些等式对信息进行相应的降序或升序排序。与大或小功能相同。在这种情况下,函数如下所示:

=AGGREGATE(14,6,$B$5:$S$5,ROW(A1))

将上面的公式放在单元格C10中,并根据需要向下复制。

一旦有了要从列表中提取的值,就可以再次使用AGGREGATE来获取其相应的列号,然后将这些列号转储到INDEX公式中以提取适当的文本值。请记住,您需要在列号上添加+1,因为所需的文本在右侧的列中。最后使用COUNTIF处理重复项。最大的问题是,如果您首先使用两个以上的平局,是要显示列表中的前两个还是要显示列表中的后两个?区别在于AGGREGATE函数是使用14还是15。在此示例中,将使用列表中的前两个。如果要最后两个,请在AGGREGATE中更改公式编号。

=INDEX($5:$5,AGGREGATE(15,6,COLUMN($B$5:$S$5)/($B$5:$S$5=C10)+1,COUNTIF($C$10:C10,C10)))

将上面的公式放在单元格D10中,并根据需要向下复制。

如果您查看JvdV使用的公式和此答案,则它们基本上是相同的。最大区别在于JvdV公式是ARRAY公式,需要 CTRL + SHIFT + ENTER 来确认公式,而只需 ENTER

无论哪种情况,在数组操作中,都应避免使用完整的列/行引用,因为它们会导致过多的计算。请注意,对于该答案,在AGGREGATE函数外部使用了$ 5:$ 5的全行引用,但在AGGREGATE内部使用了已定义的范围($ B $ 5:$ S $ 5)

POC