答案1
正如gns100
评论所说,MATCH()
失败是因为要匹配的范围不是单个列(或行)。使用XLOOKUP()
在这里效果很好,但细节确实有时会让它不合适。它遵循相同的基本方法,因为INDEX/MATCH
它给出了相同的基本知识:查找值、在哪里查找该值、去哪里找到要返回的内容。
VLOOKUP()
如果出于某种原因您喜欢它,它可以起作用。我相信,它INDEX/MATCH
可以在任何具有的 Excel 版本中工作VLOOKUP()
,因此通过显示的微小调整gns100
,当需要与旧版本兼容时,您始终可以使用它。
VLOOKUP()
通过使用INDEX()
为其第二个参数创建一个虚拟表来实现这一点,该虚拟表仅包含查找列和结果列,并按该顺序排列。例如:
=VLOOKUP($I$14, INDEX(A9:D15, ROW(INDIRECT("1:"&ROWS(A9:D15)) ),{4,1}), 2, FALSE)
{4,1}
(“数组常量”) 指示首先INDEX()
返回第 4 列,然后返回第 1 列,从而为您提供一个 (虚拟) 两列查找表,您VLOOKUP()
可以在其中“向右查找”以找到结果。因此它仍然“向右查找”,但效果是“向左查找”。
中间的那部分ROW(INDIRECT("1:"&ROWS(A9:D15))
只是从“1”到任意位置获取序列的老式方法,因此它指定返回所有行。如今,一个简单的方法SEQUENCE( ROWS(A1:D15) )
就可以了,但过去的情况并非XLOOKUP()
如此……它必须存在的原因是,当您直接使用数组常量指定行或列(或在某些其他用途中为“区域”),或者在其计算过程中生成数组常量的任何东西时,Excel 要求完全指定另一个参数,而不是仅使用,,
(对于行参数没有任何内容)或,0,
(“0”作为行参数),其中任何一个都指定“所有”行到 Excel。
是的,老派很讨厌。必须XLOOKUP()
爱FILTER()
!
您可以使用类似的技术对行进行操作,尽管组成方式略有不同,但可以INDEX()
创建一个自下而上、自上而下的虚拟表……最后一行现在是第一行,第一行现在是最后一行。这样您就可以找到“最新日期”以及您想要从下往上搜索的类似内容。
不过,所有这些都只是为了与旧版本兼容,因为XLOOKUP()
只有在特殊情况下才会无法满足需要。FILTER()
当然,现在的类似方法也只是为了与旧版本兼容。
有一件有趣的事情INDEX()
可以做到这一点,但它还没有过时,至少没有完全过时(我认为新的数组处理函数也可能使它过时),那就是它可以在所有四种变化中转置一个范围,而不仅仅是像 一样从左到右变成从上到下,反之亦然TRANSPOSE()
。但事实上,你在数以百万计的 Excel 帮助网站上从未听说过这样做,这可能意味着它在现实世界中永远不需要。