Table of contents
本教程解释了Excel LOOKUP函数的向量和数组形式,并通过公式实例演示了Excel中LOOKUP的典型和非典型用途。
每个Excel用户偶尔会问的一个最常见的问题是:" 我如何在一个工作表上查找一个值,并将一个匹配的值拉到另一个工作表上? "当然,基本情况可以有很多变化:你可能要寻找最接近的匹配而不是精确匹配,你可能要在一列中垂直搜索或在一行中水平搜索,评估一个或多个标准,等等。 然而,本质是一样的,你需要知道如何在Excel中查询。
Microsoft Excel提供了一些不同的方法来进行查找。 首先,让我们来学习一个函数,它被设计用来处理最简单的垂直和水平查找的情况。 你很容易猜到,我说的是LOOKUP函数。
Excel LOOKUP函数--语法和用途
在最基本的层面上,Excel中的LOOKUP函数在一列或一行中搜索一个值,并从另一列或一行的相同位置返回一个匹配的值。
在Excel中,有两种形式的LOOKUP。 矢量 和 阵列 下面将对每种形式进行单独解释。
Excel LOOKUP函数--向量形式
在这种情况下,一个 向量 因此,你可以使用LOOKUP的向量形式来搜索一行或一列数据的指定值,并从另一行或另一列的相同位置提取一个值。
矢量查询的语法如下。
LOOKUP(lookup_value, lookup_vector, [result_vector])在哪里?
- 查询_价值 (required) - 一个要搜索的值,可以是数字、文本、TRUE或FALSE的逻辑值,或对包含查找值的单元格的引用。
- 查询_向量 (required) - 要搜索的单行或单列范围。 它必须按以下方式排序 升序 .
- 结果_向量 (可选) - 一个行或一个列的范围,你想从中返回结果 - 一个与查找值相同位置的值。 结果_向量 必须是 相同尺寸 作为 查找_范围 如果省略,结果将从 查找_向量 .
下面的例子演示了两个简单的查找公式的操作。
垂直查询公式--在单列范围内搜索
比方说,你在D列(D2:D5)有一个卖家名单,在E列(E2:E5)有他们销售的产品。 你正在创建一个仪表板,你的用户将在B2中输入卖家的名字,你需要一个公式,在B3中拉出相应的产品。 这个任务可以通过这个公式轻松完成。
=lookup(b2,d2:d5,e2:e5)
为了更好地理解这些论点,请看一下这个截图。
水平查询公式--在单行范围内搜索
如果你的源数据有一个水平布局,即条目位于行中而不是列中,那么就在 查找_向量 和 结果_向量 争论,像这样。
=lookup(b2,e1:h1,e2:h2)
在本教程的第二部分,你会发现更多解决更复杂任务的Excel查询实例。 同时,请记住以下简单的事实,它们将帮助你绕过可能的陷阱并防止常见错误。
关于Excel LOOKUP的矢量形式,你应该知道的5件事
- 价值在 查找_向量 应按以下方式进行排序 升序 即从最小到最大或从A到Z,否则你的Excel查找公式可能会返回一个错误或不正确的结果。 如果你需要对 未分类的数据 ,然后使用INDEX MATCH或OFFSET MATCH。
- 查询_向量 和 结果_向量 必须是一个 一排 或 单栏 同样大小的范围。
- Excel中的LOOKUP函数是 不区分大小写 意思是,它不区分大写和小写文本。
- Excel LOOKUP的工作原理是 近似匹配 更确切地说,一个查找公式首先搜索精确匹配。 如果它不能准确地找到查找值,它就查找 下一个最小的值 的最大值,即在 查找_向量 小于或等于 查找_值 .
例如,如果你的查找值是 "5",该公式将首先搜索它。 如果 "5 "没有找到,它将搜索 "4"。 如果 "4 "没有找到,它将搜索 "3",以此类推。
- 如果 查找_值 是 较小的 中的最小值相比。 查找_向量 ,Excel LOOKUP返回#N/A错误。
Excel LOOKUP函数--数组形式
LOOKUP函数的数组形式在数组的第一列或第一行中搜索指定的值,并从数组的最后一列或最后一行的相同位置检索出一个值。
数组Lookup有2个参数,这两个参数都是必需的。
LOOKUP(lookup_value, array)在哪里?
- 查询_价值 - 一个要在数组中搜索的值。
- 阵列 - 一个你想搜索查询值的单元格范围。 数组第一列或第一行的值(取决于你是做V型查询还是H型查询)必须按升序排序。 大写字母和小写字母被视为等同。
例如,卖家名称位于数组的第一列(A列),订单日期位于数组的最后一列(C列),你可以使用以下公式来搜索名称并拉出匹配的日期。
=lookup(b2,d2:f5)
注意:Excel LOOKUP函数的数组形式不应该与Excel数组公式相混淆,虽然它对数组进行操作,但LOOKUP仍然是一个普通的公式,按回车键就可以完成。
关于阵列形式的Excel LOOKUP,你应该知道的4件事
- 如果 阵列 有 行数多于列数 或相同数量的列和行,一个查找公式在第一列中搜索(水平查找)。
- 如果 阵列 有 列数多于行数 , Excel LOOKUP在第一行进行搜索(垂直查找)。
- 如果一个公式找不到查询值,它就用 最大值 小于或等于的数组中的 查找_值 .
- 如果 查询值较小 比数组第一列或第一行的最小值(取决于数组尺寸),Lookup公式会返回#N/A错误。
重要提示! Excel的LOOKUP数组形式的功能是有限的,我们不建议使用它。 相反,你可以使用VLOOKUP或HLOOKUP函数,它们是改进的版本,分别做垂直和水平查询。
如何在Excel中使用LOOKUP函数--公式实例
虽然在Excel中存在更强大的查询和匹配功能(这是我们下一个教程的主题),但LOOKUP在很多情况下都很方便,下面的例子展示了几个非简单的用途。 请注意,下面的公式都使用Excel LOOKUP的向量形式。
在一列的最后一个非空白单元格中查询一个值
如果你有一列动态填充的数据,你可能想挑选最近添加的条目,即获得一列中最后的非空单元格。 为此,使用这个通用公式。
LOOKUP(2, 1/( 栏目 ""), 栏目 )在上面的公式中,除了列的引用外,所有的参数都是常数。 因此,要检索特定列中的最后一个值,你只需要提供相应的列的引用。 例如,要提取A列中最后一个非空白单元格的值,使用这个公式。
=lookup(2, 1/(a:a""), a:a)
要从其他列获得最后的值,请修改列的引用,如下图所示 - 第一个引用是要检查空白/非空白单元格的列,第二个引用是要返回值的列。
这个公式如何运作
在 查找_值 参数,你提供2或大于1的任何其他数字(稍后你会明白为什么)。
在 查找_向量 参数,你把这个表达式:1/(A:A"")
- 首先,你进行逻辑运算A:A"",将A列的每个单元格与空字符串进行比较,空单元格返回TRUE,非空单元格返回FALSE。 在上例中,F2中的公式返回这个数组:{TRUE;TRUE;TRUE;TRUE;FALSE...}。
- 然后,你用数字1除以上述数组的每个元素,TRUE等于1,FALSE等于0,你得到一个由1和#DIV/0!错误(除以0的结果)组成的新数组,这个数组被用作 查找_向量 在这个例子中,它是{1;1;1;1;#DIV/0!...}。
现在,为什么公式会返回一列中的最后一个非空值,因为 查找_值 的任何元素不匹配。 查找_向量 理解这一逻辑的关键是,Excel LOOKUP的搜索方式是近似匹配,也就是说,当找不到准确的查询值时,它就会与下列的下一个最大值相匹配 查找_向量 小于 查找_值 在我们的案例中。 查找_值 是2,并且在的最大值是 查找_向量 是1,所以LOOKUP匹配数组中的最后一个1,也就是最后一个不空的单元格。
在 结果_向量 参数,你引用你想返回一个值的列,你的Lookup公式将在与查找值相同的位置获取值。
提示:如果你希望得到 该行的编号 保持最后一个值,然后使用ROW函数来检索它。 例如。 =lookup(2,1/(a:a""),row(a:a))
在一行的最后一个非空白单元格中查询一个值
如果你的源数据是按行而不是按列排列的,你可以用这个公式得到最后一个非空单元格的值。
LOOKUP(2, 1/( 行 ""), 行 )事实上,这个公式只不过是对前一个公式的轻微修改,唯一的区别是你使用了行参考而不是列参考。
例如,要获得第1行最后一个非空单元格的值,使用这个公式。
=lookup(2, 1/(1:1""), 1:1)
下面的屏幕截图显示了结果。
获取与某行最后一个条目相关的值
只要有一点创造力,上述公式可以很容易地被定制,以解决其他类似的任务。 例如,它可以用来获得与一行中特定值的最后一个实例相关的值。 这听起来可能有点晦涩,但下面的例子将使事情更容易理解。
假设你有一个汇总表,其中A列包含卖家名称,随后的几列包含每个月的某种数据。 在这个例子中,如果某个卖家在某个月至少完成了一笔交易,那么单元格就包含 "是"。 我们的目标是获得与一行中最后一个 "是 "条目相关的月份。
该任务可以通过使用以下LOOKUP公式来解决。
=LOOKUP(2, 1/(B2:H2="yes"), $B$1:$H$1)
该公式的逻辑与第一个例子中描述的基本相同,不同的是你使用了 "等于 "运算符("=")而不是 "不等于"(""),并且对行而不是列进行操作。
下面的截图展示了一个结果。
查询作为嵌套IF的替代方法
在我们到目前为止讨论的所有查找公式中, 查找_向量 和 结果_向量 然而,Excel LOOKUP函数的语法允许以垂直数组常数的形式提供向量,这使你可以用一个更紧凑和容易阅读的公式来复制嵌套IF的功能。
比方说,你在A列有一个缩写列表,你想用全称替换它们,其中 "C "代表 "已完成","D "是 "开发","T "是 "测试"。 这个任务可以通过以下嵌套的IF函数来完成。
=IF(A2="c", "已完成", IF(A2="d", "开发", IF(A2="t", "测试","))
或者,通过使用这个查询公式。
=LOOKUP(A2, {"c"; "d"; "t"}, {"完成"; "开发"; "测试"})
如下面的截图所示,这两个公式的结果完全相同。
注意:要使Excel查询公式正确工作,在 lookup_array 应从A到Z或从最小到最大进行排序。
如果你要从一个查找表中提取数值,那么你可以将一个Vlookup函数嵌入到 查找_值 参数,以检索出一个匹配。
假设查询值在E2单元格,查询表是A2:C7,感兴趣的列("状态")是查询表中的第3列,下面的公式可以完成这个工作。
=LOOKUP(VLOOKUP(E2, $A$2:$C$7, 3, FALSE), {"c"; "d"; "t"}, {"完成"; "开发"; "测试"})
如下面的截图所示,该公式从查询表中检索项目状态,并将一个缩写替换为相应的单词。
提示:如果你使用Excel 2016作为Office 365订阅的一部分,你可以使用SWITCH功能达到类似的目的。
我希望这些例子对LOOKUP函数的工作原理有所启发。 为了更好地理解这些公式,欢迎你下载这些Excel查找实例。 在下一个教程中,我们将讨论在Excel中进行查找的其他几种方法,并解释在什么情况下最好使用哪种查找公式。 感谢你的阅读,希望下周在我们的博客上见到你!