XLOOKUP 到索引匹配或 Office 365 之前的内容

XLOOKUP 到索引匹配或 Office 365 之前的内容

我迫切需要转换这个XLOOKUP

=XLOOKUP(D10;XLOOKUP(D8;D12:G12;D14:G24;;-1);C14:C24;;-1)

到 INDEX MATCH 或无需 O365 即可运行的程序。工作截止日期快到了,我无法让它工作。

答案1

=INDEX(C14:C24,  IFERROR(  MATCH(D10,    INDEX(D14:G24,,  IFERROR(  MATCH(D8,D12:G12,0),  MATCH(D8,D12:G12,1)  )),0),    MATCH(D10,  INDEX(D14:G24,,  IFERROR(  MATCH(D8,D12:G12,0),  MATCH(D8,D12:G12,1)  )),1)  ))

你想要的很简单,但有一个例外。对于简单的部分,XLOOKUP()它基于技术INDEX/MATCH,因此通常可以完美转换。你的复杂之处在于水平查找标题,然后使用它来查找 C 列中的值。不过,这是标准的东西。任何写这个的人都可以轻松地写另一个。

因此,我认为您的块有一个例外: 的 match_mode 参数XLOOKUP(),末尾为“-1”。 转换为 的地方是 match_type 参数,其MATCH()类型略有不同。XLOOKUP()相关值为<=、和,=而使用(小于 ONLY)、 和。>=MATCH()"<"=>

可能有很多方法可以解决这个问题,但我在上面的公式中使用了一种非常简单的“这个或那个”方法,并IFERROR()辨别使用哪种方法,因为如果一种方法失败了,它就会在IFERROR()这里出错,从而产生自然结果。

该公式首先查找与 D8 完全匹配的匹配项,如果成功,则将其向前馈送。如果失败,则查找小于匹配项,实际上返回的不只是小于匹配项或第一个匹配项,而是最接近的匹配项,而不会超过一个匹配项。这满足了匹配XLOOKUP()行为的需求。

第二次使用时的情况MATCH()和您的原始公式想要的情况是一样的<=

遗憾的是,这一Xxxx()系列函数同时出现,并且XMATCH()使用相同的 match_mode 参数XLOOKUP()。但如果一个函数没有其中一个,另一个函数也没有另一个,那么...

因此,它看起来不太优雅,而且有点笨重,但它确实有用。而且它里面没有任何东西不能在至少 2007 年的版本中运行,当时IFERROR()它刚刚开始工作。在此之下,只需将精确匹配包装在 中ISERROR()并将其作为 中的测试IF()。使用不精确匹配尝试作为第二个ISERROR()参数( 为 TRUE,因为它确实出错了)并使用精确匹配作为第三个参数( 为ISERROR()FALSE,因此 为IF()FALSE)。ISERROR()将带您至少进入 Excel for Windows 2 的版本,因为我从那里开始使用 Excel,这是我很早就学到的东西。

不过,当然还有其他几种方法可以做到这一点。但这种方法有效,而且你的时间很短,所以……需要考虑一下。

相关内容