excel找到索引匹配公式的第二个匹配项

时间:2014-11-08 21:19:41

标签: excel excel-formula

我有以下公式:

=INDEX(A:A;MATCH(1;(B:B=H1)*(C:C=I1)*(NOT(ISBLANK(D:D))))*((ISBLANK(E:E))));0))

现在我想从A:匹配此公式的列和匹配函数中的条件中提取第二个结果。 使用此功能,我只获得第一个匹配(结果)的ABCDE,但是还有另一个FGHI也匹配此公式。但它出现在第一个下面的几个细胞。 我的第一场比赛是ABCDE,我的第二场比赛是FGHI。我想取后者。 我尝试过不同的方法,但我无法解决这个问题。 请帮助我这方面。 谢谢。

2 个答案:

答案 0 :(得分:3)

您希望将完整列引用减少到更接近数据实际范围的内容。我首选的方法是将SMALLINDEX行数列合并,以替换原始公式中的MATCH

=INDEX(A$2:A$9999; SMALL(INDEX(ROW($1:$9998)+((B$2:B$9999<>H1)+(C$2:C$9999<>I1)+NOT(LEN(D$2:D$9999))+NOT(LEN(E$2:E$9999)))*1E+99;;); ROW(1:1)))

我使用了一个简单的Find&amp; amp;替换以将我的逗号列表分隔符更改为分号,因此如果需要对您的系统进行少量编辑,我会道歉,

根据您自己的目的进行转录时,请记住ROW($1:$9998)是 A $ 2中的位置:9999美元,而不是工作表上的实际行。 ROW(1:1)只是SMALL的增量计数器,在您填写时会提供 1,2,3等

答案 1 :(得分:3)

WOW!谢谢。这是最终的工作版本。我的改编中有一些小错误:

=INDEX(INDIRECT("'"&file_list!$C$3&"'!$F$2:$F$999"); SMALL(INDEX(ROW(INDIRECT("'"&file_list!$C$3&"'!$1:$998"))+((INDIRECT("'"&file_list!$C$3&"'!$B$2:$B$999")<>parameters!$C$3)+(INDIRECT("'"&file_list!$C$3&"'!$i$2:$i$999")<>parameters!$A$2)+NOT(LEN(INDIRECT("'"&file_list!$C$3&"'!$d$2:$d$999")))+(LEN(INDIRECT("'"&file_list!$C$3&"'!$H$2:$H$999"))))*1E+99;;); ROW(INDIRECT("'"&file_list!$C$3&"'!$2:$2"))))

你是英雄。

Jeeped的附录:

在你明白这实际上是如何运作之前,我离英雄不远了。我试着把它放在评论中但是我太长了所以我正在使用我的编辑权限以期澄清。

如果您希望将来使用主体,了解Excel本机功能组合的工作原理非常重要。第一个ROW(INDIRECT("'"&file_list!$C$3&"'!$1:$998")将按照书面形式运作,但会更好ROW($1:$998")。这只是返回一个数字(即"'"&file_list!$C$3&"'!$F$2:$F$999"内的匹配行。数字的来源无关紧要。公式中的条件确定它是否是有效的行号,而那些DO需要工作表名称来自file_list!$C$3,因为正在检查他们的单元格值。

如果您希望 ROW(INDIRECT("'"&file_list!$C$3&"'!$2:$2"))中的第二个匹配行,ROW(2:2)也应该'"&file_list!$C$3&"'!$F$2:$F$999"。公式的这一部分只是SMALL的增量。如果你将行(1:1)放在一个单元格中并填充,你会得到 1,2,3等。这会转移到SMALL函数SMALL(<a bunch of matching row numbers>, first)然后SMALL(<a bunch of matching row numbers>, second)然后转移SMALL(<a bunch of matching row numbers>, third)等。您不会尝试返回 Sheet1!A1,Sheet1!A2,Sheet1!A3等。你想要的Allk是 1,2,3等作为 k 参数填入SMALL

Office.Microsoft.com Excel函数引用并不总是最有用的地方,但无论如何都是这样。

ROW function

SMALL function