【问题标题】:excel find the second match to an index match formulaexcel找到索引匹配公式的第二个匹配项
【发布时间】:2014-11-08 21:19:40
【问题描述】:

我有以下公式:

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

现在我想从 A:A 列中提取与此公式和匹配函数中的条件匹配的第二个结果。 使用这个函数,我只能得到第一个匹配(结果)的 ABCDE,但是还有另一个 FGHI 也匹配这个公式。但它比第一个单元格低几个单元格。 我的第一场比赛是ABCDE,第二场比赛是FGHI。我想取后者。 我尝试了不同的方法,但我无法绕过这个。 请在这方面帮助我。 谢谢。

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    您将希望减少对更接近数据实际范围的完整列引用。我的首选方法是将SMALL 与行号INDEX 数组合并,这将替换原始公式中的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)))

    我使用了一个简单的查找和替换功能将逗号列表分隔符更改为分号,因此如果需要对您的系统进行少量编辑,我深表歉意,

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

    【讨论】:

    • 谢谢。但是,由于我不得不在我的问题中缩减我的公式,所以这是我的原始公式,它有点不同。因为我使用“间接”从另一张纸上获取。在这里,但它仍然不起作用: =INDEX(INDIRECT("'"&file_list!$C$3&"'!$F$2:$F$999"); SMALL(INDEX(ROW($1:$998)+(( INDIRECT("'"&file_list!$C$3&"'!$B$2:$B$999")参数!$C$3)+(INDIRECT("'"&file_list!$C$3&"'!$i$2 :$i$999")参数!$A$2)+NOT(LEN(INDIRECT("'"&file_list!$C$3&"'!$d$2:$d$9999")))+NOT(LEN(INDIRECT ("'"&file_list!$C$3&"'!$H$2:$H$999"))))*1E+99;;); ROW(1:1))) 顺便说一下,我的单元格值是文本字符串。
    • 这里是最后的小修正,但仍然没有成功:=INDEX(INDIRECT("'"&file_list!$C$3&"'!$F$2:$F$999"); SMALL( INDEX(ROW(INDIRECT("'"&file_list!$C$3&"'!$2:$998"))+((INDIRECT("'"&file_list!$C$3&"'!$B$2:$B$999") 参数!$C$3)+(INDIRECT("'"&file_list!$C$3&"'!$i$2:$i$999")参数!$A$2)+NOT(LEN(INDIRECT("' "&file_list!$C$3&"'!$d$2:$d$9999")))+NOT(LEN(INDIRECT("'"&file_list!$C$3&"'!$H$2:$H$999")) ))*1E+99;;); ROW(1:1)))
    【解决方案2】:

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

    =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("'"&amp;file_list!$C$3&amp;"'!$1:$998") 将按书面形式工作,但最好是ROW($1:$998")。这只是返回一个数字(即"'"&amp;file_list!$C$3&amp;"'!$F$2:$F$999" 中的匹配行。数字来自哪里并不重要。公式中的条件确定它是否是有效的行号,并且那些确实需要来自@ 的工作表名称987654327@,因为正在检查它们的单元格值。

    以类似的方式,ROW(INDIRECT("'"&amp;file_list!$C$3&amp;"'!$2:$2")) 应该是ROW(2:2),如果您希望第二个匹配行位于'"&amp;file_list!$C$3&amp;"'!$F$2:$F$999"。这部分公式只是SMALL 的增量。如果您将 row(1:1) 放入单元格并填写,您将得到 1、2、3 等。这会以SMALL(&lt;a bunch of matching row numbers&gt;, first) 然后SMALL(&lt;a bunch of matching row numbers&gt;, second) 然后SMALL(&lt;a bunch of matching row numbers&gt;, third) 等形式转移到SMALL 函数中。您不是要返回Sheet1!A1、Sheet1!A2、Sheet1!A3 等。您想要的只是 1、2、3 等 以作为 k 参数填充到 SMALL 中。

    Office.Microsoft.com Excel 函数参考并不总是最有用的地方,但无论如何它们都在这里。

    ROW function

    SMALL function

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2017-07-31
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多