Excel XLOOKUP函数与公式实例

  • Share This
Michael Brown

本教程介绍了XLOOKUP--Excel中垂直和水平查找的新功能。 左侧查找、最后匹配、多条件Vlookup以及更多过去需要火箭科学学位才能完成的事情,现在变得像ABC一样简单。

每当你需要在Excel中查询时,你会使用哪个函数? 是基石VLOOKUP还是它的横向兄弟姐妹HLOOKUP? 在更复杂的情况下,你会依靠典型的INDEX MATCH组合还是把工作交给Power Query? 好消息是,你不必再选择了--所有这些方法都在为一个更强大和通用的继任者,XLOOKUP函数让路。

XLOOKUP如何更好呢? 在很多方面!它可以纵向和横向,向左和向上看,用多个条件搜索,甚至可以返回整列或整行的数据,而不仅仅是一个值。 微软花了30多年时间,但他们终于成功地设计了一个强大的功能,克服了VLOOKUP的许多令人沮丧的错误和弱点。

有什么问题吗? 唉,有一个。 XLOOKUP功能只在Excel for Microsoft 365、Excel 2021和Excel for the web中可用。

    Excel XLOOKUP函数--语法和用途

    Excel中的XLOOKUP函数在一个范围或数组中搜索一个指定的值,并从另一列返回相关的值。 它可以纵向和横向查找,并进行精确匹配(默认)、近似(最接近)匹配或通配符(部分)匹配。

    XLOOKUP函数的语法如下。

    XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode]。

    前3个参数是必须的,后3个参数是可选的。

    • 查询_价值 - 要搜索的值。
    • 查找_数组 - 要搜索的范围或阵列。
    • 返回数组 - 返回值的范围或数组。
    • 如果没有找到 [optional] - 如果没有找到匹配,将返回的值。 如果省略,将返回一个#N/A错误。
    • 匹配_mode [可选] - 要执行的匹配类型。
      • 0或省略(默认)--完全匹配。 如果没有找到,会返回#N/A错误。
      • -1 - 完全匹配或下一个更小的值。 如果没有找到完全匹配,则返回下一个更小的值。
      • 1 - 完全匹配或下一个更大的值。 如果没有找到完全匹配,则返回下一个更大的值。
      • 2 - 通配符匹配。
    • 搜索_mode [可选] - 搜索的方向。
      • 1或省略(默认)--从头到尾搜索。
      • -1 - 按相反的顺序搜索,从最后一个到第一个。
      • 2--对数据进行升序排序的二进制搜索。
      • -2 - 在数据上进行二进制搜索,排序为降序。

      根据微软的说法。 二进制搜索 它是一种特殊的算法,通过与数组的中间元素进行比较,找到一个查找值在排序数组中的位置。 二进制搜索比普通搜索快得多,但只在排序的数据上正确工作。

    基本的XLOOKUP公式

    为了获得更多的理解,让我们以最简单的形式建立一个Xlookup公式来进行精确查找。 为此,我们只需要前3个参数。

    假设你有一个汇总表,上面有地球上五个大洋的信息。 你想在F1中得到一个特定大洋的输入面积( 查找_值 与A2:A6的海洋名称( lookup_array )和C2:C6的面积( return_array ),该公式如下。

    =xlookup(f1, a2:a6, c2:c6)

    翻译成简单的英语,它说:在A2:A6中搜索F1值,并返回同一行C2:C6中的一个值。 没有列索引号,没有排序,没有Vlookup的其他可笑的怪癖!它只是工作:)

    Excel中的XLOOKUP与VLOOKUP的比较

    与传统的VLOOKUP相比,XLOOKUP有很多优点。 它在哪些方面比VLOOKUP好呢? 这里列出了最好的10个功能,这些功能使Excel中的其他查找功能都大打折扣。

    1. 垂直和水平查询 XLOOKUP函数因其能够纵向和横向查找而得名。
    2. 向任何方向看:右、左、下或上 虽然VLOOKUP只能在最左边的一列中搜索,HLOOKUP只能在最上面的一行中搜索,但XLOOKUP却没有这样的限制。 在Excel中臭名昭著的左键查找不再是一件痛苦的事了!
    3. 默认为完全匹配 在大多数情况下,你将寻找一个精确的匹配,XLOOKUP默认返回它(不像VLOOKUP函数默认为近似匹配)。 当然,如果需要,你也可以让XLOOKUP执行一个近似匹配。
    4. 使用通配符的部分匹配 当你只知道查询值的某些部分,而不是全部时,通配符匹配就会派上用场。
    5. 按相反顺序搜索 早些时候,为了得到最后出现的数据,你必须颠倒源数据的顺序。 现在,你只需设置 搜索_mode 参数为-1,以强制你的Xlookup公式从后面搜索并返回最后的匹配。
    6. 返回多个值 通过操纵 return_array 参数,你可以拉出与你的查询值有关的整行或整列的数据。
    7. 用多种标准搜索 .Excel XLOOKUP原生处理数组,这使得它可以执行多条件的查找。
    8. 如果错误功能 传统上,我们使用IFNA函数来捕获#N/A错误。 XLOOKUP将这一功能纳入了 if_not_found 参数,如果没有找到有效的匹配,允许输出你自己的文本。
    9. 列的插入/删除 VLOOKUP最令人恼火的问题之一是,增加或删除列会破坏公式,因为返回列是由其索引号识别的。 使用XLOOKUP,你提供返回范围,而不是数字,这意味着你可以根据需要插入和删除任意多的列而不破坏任何东西。
    10. 更好的表现 VLOOKUP可能会拖慢你的工作表,因为它在计算中包括整个表,这导致处理的单元格远远超过实际需要。 XLOOKUP只处理它真正依赖的查找和返回数组。

    如何在Excel中使用XLOOKUP--公式示例

    下面的例子展示了最有用的XLOOKUP功能。 此外,你将发现一些非琐碎的用途,将使你的Excel查找技能达到一个新的水平。

    纵向和横向看

    Microsoft Excel过去有两个函数用于不同的查找类型,每个函数都有自己的语法和使用规则:VLOOKUP用于垂直查找一列,HLOOKUP用于水平查找一行。

    XLOOKUP函数可以用同样的语法做这两件事,区别在于你为查找和返回数组提供了什么。

    对于v-lookup,提供列。

    =xlookup(e1, a2:a6, b2:b6)

    对于h-lookup,输入行而不是列。

    =xlookup(i1, b1:f1, b2:f2)

    本机执行的左键查询

    在早期版本的Excel中,INDEX MATCH公式是唯一可靠的向左或向上查找的方法。 现在,你不再需要将两个函数结合起来,而一个函数就足够了。 只要指定目标查找数组,XLOOKUP就能顺利处理,无论其位置如何。

    作为一个例子,让我们把 级别 我们的目标是在F1中获得海洋输入的等级。 VLOOKUP在这里会陷入困境,因为它只能从查找列右侧的列中返回一个值。 Xlookup公式可以轻松应对。

    =xlookup(f1, b2:b6, a2:a6)

    以类似的方式,你可以在水平搜索行时看上面。

    具有精确和近似匹配的XLOOKUP

    匹配行为由第五个参数控制,称为 Match_mode 默认情况下,会进行精确匹配。

    请注意,即使你选择了一个近似的匹配 ( Match_mode 不同的是,如果没有找到精确的查找值,它将返回什么。

    Match_mode参数。

    • 0 或省略 - 完全匹配;如果没有找到 - #N/A错误。
    • -1 - 完全匹配;如果没有找到 - 下一个较小的项目。
    • 1 - 完全匹配;如果没有找到 - 下一个更大的项目。

    完全匹配的XLOOKUP

    这是你在Excel中做查询时可能使用的99%的选项。 因为精确匹配是XLOOKUP的默认行为,你可以省略掉 Match_mode 并只提供前三个必要的参数。

    然而,在某些情况下,精确匹配是行不通的。 一个典型的情况是当你的查询表不包含所有的值,而是包含 "里程碑 "或 "界限",如基于数量的折扣,基于销售的佣金等。

    我们的示例查询表显示了考试分数和成绩之间的相关性。 正如你在下面的截图中所看到的,只有当某个学生的分数与查询表中的数值完全匹配时,精确匹配才起作用(如第3行的Christian)。 在所有其他情况下,会返回一个#N/A错误。

    =xlookup(f2, $b$2:$b$6, $c$2:$c$6)

    为了得到成绩而不是#N/A错误,我们需要寻找近似匹配,如下例所示。

    近似匹配 XLOOKUP

    要执行一个近似的查询,请将 Match_mode 参数为-1或1,这取决于你的数据是如何组织的。

    在我们的案例中,查找表列出了成绩的下限。 因此,我们设置 Match_mode 为-1,以便在没有找到完全匹配的情况下搜索下一个较小的值。

    =xlookup(f11, $b$11:$b$15, $c$11:$c$15, ,-1)

    例如,布莱恩的分数是98分(F2)。 公式在B2:B6中搜索这个查询值,但找不到。 然后,它搜索下一个较小的项目,发现90分,对应的是A级。

    如果我们的查找表包含了成绩的上限,我们将设置 Match_mode 为1,以便在完全匹配失败时搜索下一个更大的项目。

    =xlookup(f2, $b$2:$b$6, $c$2:$c$6, ,1)

    该公式搜索98,又没有找到。 这次,它试图找到下一个更大的值,得到100,对应于A级。

    提示:当复制一个Xlookup公式到多个单元格时,用绝对的单元格引用(如$B$2:$B$6)锁定查找或返回范围,以防止它们改变。

    XLOOKUP与部分匹配(通配符)。

    要执行部分匹配查询,请设置 Match_mode 参数为2,它指示XLOOKUP函数处理通配符。

    • 星号(*)--代表任何序列的字符。
    • 问号(?)--代表任何单一的字符。

    为了了解它是如何工作的,请考虑下面的例子。 在A栏,你有几个智能手机型号,在B栏,是它们的电池容量。 你对某个智能手机的电池很好奇。 问题是,你不确定你能准确地输入A栏中出现的型号名称。为了克服这个问题,输入肯定存在的部分,并取代其余的用通配符的字符。

    例如,要获得iPhone X的电池信息,使用这个公式。

    =XLOOKUP("*iphone X*", A2:A8, B2:B8, ,2)

    或者,在某个单元格中输入查询值的已知部分,并将单元格引用与通配符连接起来。

    =XLOOKUP("*"&E1& "*", A2:A8, B2:B8, ,2)

    XLOOKUP以相反的顺序得到最后出现的情况

    如果你的表包含多个查询值的出现,你有时可能需要返回 最后一场比赛 要做到这一点,请配置你的Xlookup公式,以便按相反顺序搜索。

    搜索的方向由第6个参数控制,该参数名为 搜索_mode :

    • 1或省略(默认)--从第一个值到最后一个值进行搜索,即从上到下的垂直查找或从左到右的水平查找。
    • -1 - 按照从最后一个值到第一个值的相反顺序搜索。

    作为一个例子,让我们返回一个特定销售人员的最后一次销售。 为此,我们把前三个必要的参数(G1为 查找_值 ,B2:B9为 lookup_array ,而D2:D9为 return_array ),并在第5个参数中放入-1。

    =xlookup(g1, b2:b9, d2:d9, , ,-1)

    直截了当,简单易行,不是吗?

    XLOOKUP用于返回多个列或行

    XLOOKUP还有一个令人惊奇的特点,就是它能够返回与同一匹配有关的多个值。 所有这些都是用标准的语法完成的,没有任何额外的操作!

    从下表中,假设你想检索与感兴趣的销售人员(F2)有关的所有细节。 你需要做的是提供一个范围,而不是一个单独的列或行,用于 return_array 争论。

    =xlookup(f2, a2:a7, b2:d7)

    你在结果范围的左上角单元格中输入公式,Excel会自动将结果溢出到相邻的空白单元格中。 在我们的例子中,返回数组(B2:D7)包括3列( 日期 , 项目 数量 ),所有三个值都被返回到G2:I2的范围内。

    如果你想在一列中垂直排列结果,可以将XLOOKUP嵌套到TRANSPOSE函数中来翻转返回的数组。

    =transpose(xlookup(g1, a2:a7, b2:d7))

    以类似的方式,你可以返回一整列的数据,比如说 数量 为此,使用包含 "Amount "的F1单元格作为 查找_值 ,包含列标题的A1:D1范围为 lookup_array 和包含所有数据的范围A2:D7为 return_array .

    =xlookup(f1, a1:d1, a2:d7)

    注意:由于多个值被填充到相邻的单元格中,请确保你在右边或下面有足够的空白单元格。 如果Excel找不到足够的空白单元格,就会出现#SPILL!错误。

    提示:XLOOKUP不仅可以返回多个条目,还可以用你指定的其他值来替换它们。 这种批量替换的例子可以在这里找到:如何用XLOOKUP搜索和替换多个值。

    有多个标准的XLOOKUP

    XLOOKUP的另一大优势是它可以原生处理数组。 由于这种能力,你可以直接在数组中评估多个条件。 lookup_array 争论。

    XLOOKUP(1, ( 标准_范围1 标准1 ) * ( 标准_范围2 标准2 ) * (...), return_array )

    这个公式如何运作 :每个标准测试的结果是一个由TRUE和FALSE值组成的数组。 数组的乘法将TRUE和FALSE分别转换成1和0,并产生最终的查找数组。 正如你所知,乘以0总是得到0,所以在查找数组中,只有符合所有标准的项目才用1表示。 因为我们的查找值是 "1",所以Excel将第一个 "1" lookup_array (第一个匹配)并返回来自 return_array 在同一位置。

    为了看到这个公式的作用,让我们从D2:D10中抽取一个金额( return_array ),具备以下条件。

    • 标准1(日期)= G1
    • 标准2(销售人员)=G2
    • 标准3(项目)= G3

    与A2:A10中的日期( 标准_范围1 ),B2:B10的销售人员姓名( 标准_范围2 )和C2:C10的项目( 标准_范围3 ),这个公式是这样的。

    =xlookup(1, (b2:b10=g1) * (a2:a10=g2) * (c2:c10=g3), d2:d10)

    虽然Excel的XLOOKUP函数是处理数组的,但它是作为一个普通的公式工作的,而且是通过通常的回车键完成。

    有多个条件的XLOOKUP公式不限于 "等于 "条件,你也可以自由使用其他逻辑运算符。 例如,要过滤G1或更早日期的订单,在第一个条件中放入"<=G1"。

    =XLOOKUP(1, (A2:A10<=G1) * (B2:B10=G2) * (C2:C10=G3), D2:D10)

    双倍XLOOKUP

    要找到某一行和某一列的交叉点上的数值,要执行所谓的 双重查询 矩阵查询 是的,Excel的XLOOKUP也可以做到这一点!你只需将一个函数嵌套在另一个函数中。

    XLOOKUP( lookup_value1 , lookup_array1 , XLOOKUP( lookup_value2 , lookup_array2 , 数据值 ))

    这个公式如何运作 : 这个公式是基于XLOOKUP返回整行或整列的能力。 内部函数搜索其查询值并返回相关数据的一列或一行。 该数组进入外部函数作为 return_array .

    在这个例子中,我们要找到某位销售人员在某一季度的销售额。 为此,我们在H1(销售人员姓名)和H2(季度)中输入查询值,并通过以下公式进行双向Xlookup。

    =xlookup(h1, a2:a6, xlookup(h2, b1:e1, b2:e6))

    或者反过来说。

    =xlookup(h2, b1:e1, xlookup(h1, a2:a6, b2:e6))

    其中A2:A6是销售人员名称,B1:E1是季度(列标题),B2:E6是数据值。

    双向查找也可以通过INDEX匹配公式和其他一些方式进行。 更多信息,请参见Excel中的双向查找。

    如果错误XLOOKUP

    当没有找到查询值时,Excel XLOOKUP会返回一个#N/A的错误。 对于专家级用户来说,这是非常熟悉和可以理解的,但对于新手来说,这可能是相当混乱的。 要用一个用户友好的信息来取代标准的错误符号,在第四个参数中输入你自己的文本,名为 if_not_found .

    回到本教程讨论的第一个例子,如果有人在E1中输入一个无效的海洋名称,下面的公式将明确告诉他们 "没有找到匹配"。

    =XLOOKUP(E1, A2:A6, B2:B6, "未找到匹配项")

    注意事项。

    • ǞǞǞ if_not_found 参数只捕获#N/A错误,而不是所有错误。
    • #N/A错误也可以用IFNA和VLOOKUP来处理,但语法要复杂一些,而且一个公式要长一些。

    区分大小写的XLOOKUP

    默认情况下,XLOOKUP函数将小写字母和大写字母视为相同的字符。 要使其对大小写敏感,请使用EXACT函数对 lookup_array 争论。

    xlookup(true, exact( 查找_值 , lookup_array ), return_array )

    这个公式如何运作 : EXACT函数将查找值与查找数组中的每个值进行比较,如果它们完全相同,包括字母大小写,则返回TRUE,否则返回FALSE。 这个逻辑值数组将进入 lookup_array 作为结果,XLOOKUP在上述数组中搜索TRUE值,并从返回数组中返回一个匹配值。

    例如,要从B2:B7获取价格( return_array ) 为E1中的项目( lookup_value) ,E2中的公式是。

    =XLOOKUP(TRUE, EXACT(E1, A2:A7), B2:B7, "未找到" )

    注意:如果在查找数组中有两个或更多完全相同的值(包括字母大小写),将返回第一个找到的匹配值。

    Excel XLOOKUP不工作

    如果你的配方不能正常工作或导致错误,很可能是由于以下原因。

    XLOOKUP在我的Excel中不可用

    XLOOKUP函数不向后兼容。 它只在Excel for Microsoft 365和Excel 2021中可用,不会出现在早期版本中。

    XLOOKUP返回错误的结果

    如果你明显正确的Xlookup公式返回一个错误的值,有可能是查找或返回的范围在公式向下或向对面复制时 "移位 "了。 为了防止这种情况发生,确保总是用绝对的单元格引用锁定两个范围(如$A$2:$A$10)。

    XLOOKUP返回#N/A错误

    一个#N/A的错误只是意味着没有找到查询值。 要解决这个问题,可以尝试搜索近似的匹配,或者通知你的用户没有找到匹配。

    XLOOKUP返回#VALUE错误

    如果查找和返回数组的尺寸不兼容,就会发生#VALUE!错误。 例如,不可能在一个水平数组中查找,并从一个垂直数组中返回值。

    XLOOKUP返回#REF错误

    当在两个不同的工作簿之间查找时,其中一个已经关闭,会出现#REF!错误。 要解决这个错误,只需打开两个文件即可。

    正如你刚才所看到的,XLOOKUP有许多了不起的功能,使它成为Excel中几乎所有查找的功能。 我感谢你的阅读,希望下周在我们的博客上看到你。

    供下载的实践工作手册

    Excel XLOOKUP公式示例(.xlsx文件)。

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.