例如,我将我的表称为 Table1(我已将其定义为名称),并在新数据进入时将其添加。如何使用 vlookup 检索 Table1 底部的最后一个数据点的第二列值?
答案1
第一列是数字还是文本?您可以使用范围查找选项并搜索大于表中任何值的值。如果第一列包含单词,请尝试:
=VLOOKUP("ZZZZZ", Table1, 2, TRUE)
或者,如果第一列是五位数字,请尝试:
=VLOOKUP("99999", Table1, 2, TRUE)
我突然想到这个也可以,但是速度比较慢。将 Table1 的第一列定义为 Table1Col1。
=VLOOKUP(MAX(Table1Col1), Table1, 2, TRUE)
答案2
如果您想要动态更新所选列,可以使用 MATCH() 公式来填充 col_index_num 值。例如:
=VLOOKUP("d", Table1, 2, FALSE)
将返回第二列的值。而:
=VLOOKUP("d",Table1[#All],MATCH("value2",Table1[#Headers],0),FALSE)
将返回标题为 value2 的列中的值。更动态的是,你可以像这样编写:
=VLOOKUP("d", Table1, MATCH(Table1[[#Headers],[value2]],Table1[#Headers],0), FALSE)
如果你重命名表格列标题,它将自动更新
答案3
=VLOOKUP(A2,Table1,2,MAX(Table1Col2))
解释: =VLOOKUP(**Data being looked up**,**Name of Table or data range**,**column of data being looked up**,MAX(**Name or data range of data being looked up**))
它将返回与 lookup_value 匹配的行的最后一个值
答案4
回答主要是为了给当前的搜索者提供一个现代的答案(“现代”= 2021)。
您可以使用XLOOKUP()
。它不是完美的替代品,在某些情况下也不适合。但这个很简单,它的测试版是重新设计的。
有趣的特性是它有一个参数可以从末尾向开头搜索所以...扣篮。
然而,在阅读答案时,我注意到,对于这个问题,没有明确的答案,在发布时,答案是行不通的。中间的答案根本没有回答这个问题,第三个答案更是虚伪至极。它使用一些花哨的东西来生成布尔值,TRUE
而只需键入TRUE
(或者0
对于他们来说,他们更喜欢这样)就可以完成完全相同的事情。几乎给人的印象是,回答者希望一些看起来很花哨、很自命不凡的东西会呈现出价值的外观。哎呀。虽然它可以给出一个正确的答案,但这并不是正确的,这只是偶然的。这是一个相当大的机会,因为主要的失败模式是当期望值是范围中的绝对最后一个项目时,但考虑到这可能特别基于日期,这很有可能发生。
第一个答案给出了一些可以尝试的实用方法,根据你的数据,其中一个方法或受其启发的方法可能对你有用。不像第三个答案,它完全是骗子的启发,会让很多人对结果产生强烈的信心,当老板大声喊出失败时,他们会目瞪口呆。
然而,它们只是实用的东西,不一定是解决方案。互联网上“很多地方”都有一种标准方法,可以LOOKUP()
巧妙地使用。但是,有没有更直接、更容易理解的方法呢?(对于大多数人来说,这种LOOKUP()
方法虽然很聪明,真的很聪明,而且实际上很简单,但却令人困惑,在第一眼就迷失了方向,所以虽然他们可以轻松地掌握它,但他们永远无法意识到这一点。)
可以说,该INDEX()
函数可用于将表格倒置,因此呈现给公式其余部分的第一行是原始(“物理”)范围中的最后一行。这是通过为 row 参数指定一些内容来实现的,这些内容会生成一个数字序列,从最高行号(最高“索引”)开始,一直到 1。
这是在 2012/2013 中完成的,使用一个巧妙的技巧来生成序列中的行号: ROW(1:100)
给出一个序列 1、2、3、... 98、99、100。要反转它,您可能认为只需使用,ROW(100:1)
但 Excel 会帮助您“修复”您的愚蠢错误ROW(1:100)
— 无论您喜欢与否。没有办法克服这一点。但是,如果您知道使用的最高行号,并且您不会遇到问题,您可以将 1 添加到它,因此在此示例中为 100 + 1,然后从中减去 Excel 给您的序列。由于您有 101 - 1、100 - 2、100 - 3,...,因此您得到 100、99、98,... 一直到 101 - 100 或 1。
将其用作行参数,以便INDEX()
将行从最后一行反转为第一行。
对于 的列INDEX()
,您必须考虑 的常规使用体验VLOOKUP()
。通常,您会给它一个可能有很多列的表/范围。所以可能是 A2:W900。您想搜索 A 列并在 T 列(或第 20 列)中找到某些内容。所以您可能会得到类似 的内容VLOOKUP("cow",A2:W900,20,false)
。好吧,INDEX()
让您使用一点技巧来仅指定某些列,而不是使用给定范围内的所有列:数组常量。
Array Constants
是一种向 Excel 提供数值数组的方法。它们看起来像这样: {"a","cow",13,999,"fisherman","circu"}. So in this example, you want to have columns A and T, or 1 and 20, so you'd give
INDEX() {1,20}`,第三个参数是列参数。
所有这些的目的是为INDEX()
您构建一个虚拟表,以代替真实表在公式中使用。虚拟表没有 2-900 行和 AW 列。它只有 900 到 2 行和 A 和 T 列。该函数在示例中如下所示:
INDEX( A2:W900, 900-ROW(1:899), {1,20} )
(请记住,您使用的是第 2 行到第 900 行,因此您只有 899 行,而不是 900 行。因此,Excel 第 2 行是范围内的“索引”1,而 Excel 第 900 行是索引 899。899 + 1 = 900,因此您使用 900,而不是 901。然后公式中的数字才“有意义”。就像将第一个硬盘称为“驱动器 0”而不是“驱动器 1”。)
现在您有一个仅包含 A 列和 T 列的虚拟表,首先是第 900 行,最后是第 2 行,这是您在 中使用的表VLOOKUP()
。因此,查找单词“cow”并获得任何精确匹配的完整公式...从末尾开始并向开头回溯,如下所示:
=VLOOUP( "cow", INDEX( A2:W900, 900-ROW(1:899), {1,20} ), 2, false )
由于“真实”表的数据是第 2-900 行,因此这是通过使用将数据反转为第 900-2 行的表来查找最后一个匹配项。并且它只使用两列,即您在其中进行查找的列和您从中获取数据的列,而不是所有 23 列数据。由于只有两列,因此返回答案的列总是很容易:它是第 2 列。“false”确保完全匹配(如果有)。
并且这将永远有效。
另外,我们使用的那个数组常量,{1,20}
...您认为反转这些值会有什么效果?如{20,1}
。它们反转列的顺序。因此,如果您希望使用VLOOKUP()
,但此示例中的查找列是 T 列,而您想要 A 列的结果,那么您就倒霉了。(我在美国海军核电计划任职期间发生的“倒霉事故”。天哪,“OOL”事故……我们几年前差点就创造了“LOL”,但……只是……没有……好吧,我想反应堆事故不是开玩笑的事,所以也许最好,是吧?)您的查找列必须位于结果列的左侧才能使用VLOOKUP()
……不好!
但是,由于您创建了一个反转列的虚拟表,因此您的查找列突然出现在左侧!太棒了!
另外,列(或行,但通常是列)的数组常量只能使用一些数字,可以按任何顺序使用它们,并且如果愿意的话可以多次使用它们。
记住“现代方法”:现在我们可以用来SEQUENCE()
直接生成从 899 到 1 的反向序列。