函数返回引用什么意思_强烈推荐 | XLOOKUP函数太强悍了!完全吊打旧版本的查找引用函数...

本文详细介绍了Excel新引入的XLOOKUP函数,它能替代VLOOKUP、HLOOKUP、LOOKUP等多个旧版函数,提供更强大、简便的查找和引用功能。XLOOKUP支持常规查找、逆向查找、模糊匹配、返回数组等多种用法,并且在模糊匹配时无需数据列升序排列。此外,XLOOKUP还可以应用于动态数组,实现单个公式返回多单元格结果。文章通过多个案例展示了XLOOKUP的强大功能,建议读者实际操作以深入了解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7daac381f5472a97680a6fbb12a0ff56.png
全文超过2100字,同时还有5个视频详细讲解XLOOKUP的用法以及和旧版本函数的对比。但是相信我,这些文字和视频非常值得你阅读观看。文末提供素材和视频下载方式。

众所周知,在Office2019版本出来以前,其它所有旧版本中的VLOOKUP函数绝对是一个明星级的函数。如果你不懂VLOOKUP函数,你都不好意思跟人说你会Excel。

在Office2019版本中,增加的其中一个新函数是XLOOKUP。今天试了一下,实在是太强悍!这一个函数不仅可以取代以前的LOOKUP, VLOOKUP, HLOOKUP, INDEX+,MATCH, 而且功能比这些旧函数更强大,操作更简便。

不夸张地说,XLOOKUP完全是吊打其它查找引用函数。建议一定要看看,动手试一试,而不仅仅是收藏。

PS: 按照官方说法,XLOOKUP函数当前可用于每月频道中的 Microsoft 365 订阅者。 将在2020年7月开始向半年频道中 Microsoft 365 订阅者提供。理论上讲,Office2019每月频道的用户应该也已经更新,装有Office2019的小伙伴可以试一试。

语法

= XLOOKUP (lookup_value,lookup_array,return_array,[if_not_found],[match_mode],[search_mode])

9868ce3721085dbae7531809eccad0c3.png

XLOOKUP函数一共有6个参数,前三个为必需参数,后三个为可选参数。看起来比似乎以往的查找函数要复杂。我跟大家理一理。

前三个参数很好理解,其实“找什么,到哪里找,从哪里返回数据”。

第四参数,取代了以前VLOOKUP和IFNA的嵌套使用,意思是,“如果找不到(#N/A),那么返回指定的替代字符”。

第五参数,如果是模糊匹配的时候找不到,那么选择匹配下一个较小的项还是较大的项?是否使用通配符?这是由这个参数决定的。

第六参数,从前往后搜索查找值还是从后往前搜索查找值?

下面,我们通过几个案例了解XLOOKUP的强悍用法。

案例1 常规查找和逆向

常规查找的方法和VLOOKUP,HLOOKUP很像,但是它既可以按行查找,也可以按列查找。也就是说,以前VLOOKUP和HLOOKUP两个干的活,XLOOKUP都能干。

然而不管是VLOOKUP还是HLOOKUP,被查找区域都只能是一个表数组区域而不是某一行或者某一列,然后指定返回这个区域第几列或者第几行的数据。

而XLOOKUP的用法则灵活得多,查找区域和返回区域是独立的列或者独立的行。更重要的是,被查找的列不需要在返回数据列的左侧!要知道,以前用VLOOKUP进行逆向查找的时候,公式是非常复杂的,需要用到一些比较抽象的技巧,对于初学者很不友好。

而XLOOKUP是轻松解决了这个问题。

c2c8bc2d668085e732d029b8553e8e89.png
XLOOKUP常规查找和逆向查找https://www.zhihu.com/video/1249714914484649984

案例2 返回数组

如果需要用VLOOKUP查找返回多个数据,显然我们需要写入或复制多个公式。或者用MATCH函数充当第三参数,然后复制这个嵌套公式。写的时候还要注意引用方式(相对引用/绝对引用/混合引用)。

在2019版本中,新增了动态数组函数。同时在XLOOKUP其实也可以应用到动态数组的概念了。

也就是说,如果结果返回的是一组数据,那么返回的结果会“自动溢出”到旁边的单元格。“自动溢出”在Excel里面是一个全新的概念。

这样做的好处非常明显:

  1. 只需要写入一个函数即可返回多个单元格的结果;
  2. 由于返回的数组用了自动溢出的概念,所以写公式的时候不需要考虑单元格引用方式(用相对引用就可以了),公式会显得更简洁。

需要注意的是,被溢出的单元格区域需要保持空值状态,否则会出现#SPILL!错误。

505cec88c1982dd6455e973cfe4a936f.png
XLOOKUP返回自行溢出数组https://www.zhihu.com/video/1249715031522656256

案例3 模糊匹配

查找数据,免不了会用到模糊匹配。尤其是在查找判断数据区间的时候。

LOOKUP函数在使用的时候默认模糊匹配。但是,用LOOKUP函数进行查找的时候,查找逻辑是用“二分法”,所以要求被查找的数据列必须【升序排列】。如果找不到精确匹配的数据,那么就会返下一个比较小的项(注意了,这是默认规则,不能返回下一个比较大的项哦)。

但是XLOOKUP利用第5参数,可以很简单地返回精确匹配数据或者下一个较小或者下一个较大的项,同时也支持“通配符”。

但是最最最重要的是,用XLOOKUP进行模糊匹配,并不要求被查找数据列进行升序排列!要知道在LOOKUP函数中,这是一个隐藏得很深很容易发生错误的地方。一旦没有升序排列,LOOKUP不会出现错误值,而是依然会返回一个“不可预知”的数据,但是很可能返回的数据是错误的。

单单就这个特性来说,XLOOKUP就已经足够强大了。

0680cf149eb3553b8e1e7f14b8404330.png
XLOOKUP模糊匹配的用法https://www.zhihu.com/video/1249715910606323712

案例4 XLOOKUP嵌套使用取代INDEX+MATCH

在以往版本的查找函数中,有一个经典组合INDEX+MATCH,MATCH函数用于返回行号或者列号,INDEX函数根据返回的行号和列号定位到要返回的数据。

现在,同样的功能,也可以用XLOOKUP函数来实现。通过嵌套XLOOKUP函数,返回指定行指定列的数据。

这个案例中,实现同样的结果,还是XLOOKUP的公式写法更简便。而且,理解XLOOKUP可以返回一组数据在内存中供调用,对于以后再其它函数中嵌套使用也是很有帮助的。

一些嵌套的新用法,有待我们继续挖掘。

473c87b06c18b370a0bf909d0efcf41c.png
XLOOKUP嵌套使用https://www.zhihu.com/video/1249716018479689728

案例5 区间求和/区间计数

再深入一点研究,就会发现XLOOKUP不仅仅能返回单元格中的数据,而且在特定情况下还能返回单元格的名称,比如返回“A1,B2”这样的名称。

这样的话就给了我们更多的想象空间,比如这个案例的区间求和/区间计数。用SUM函数或者COUNT函数和XLOOKUP嵌套使用。

如果不使用XLOOKUP实现区间求和,我们可以利用以往函数进行一些技巧性的组合使用当然也能实现,但是显然公式要复杂得多。

8a08f115ab0413c89f797d1dbe89b1c5.png
XLOOKUP区间求和与区间计数https://www.zhihu.com/video/1249716101526507520

总结

通过上面的几个案例演示,以及和旧版本函数的对比,相信你已经对XLOOKUP有相当多的了解了。

不得不承认,XLOOKUP确实太强大了!在上面的案例我们可以看出XLOOKUP可以取代旧版本的一些函数,或者大大简化函数公式的写法。

XLOOKUP肯定还有其他方面的用法,需要我们继续挖掘TA的潜能。

<think>好的,我现在需要帮助用户修改或扩展VBA中的XLOOKUP函数,使其能够返回多列结果。首先,我需要回忆一下VBA中XLOOKUP的基本用法XLOOKUP是Excel的一个函数,用于查找返回单个值,但用户想要返回多列的结果。这可能涉及到数组操作或者循环。 首先,我需要确定用户是否已经有一个自定义的XLOOKUP函数,或者他们想基于内置的XLOOKUP进行扩展。由于VBA本身可能没有直接支持多列返回XLOOKUP,可能需要编写一个自定义函数。 接下来,我应该考虑如何设计这个函数。可能需要参数包括查找值、查找数组、返回数组的范围,以及要返回的列数。例如,用户传入查找值,找到匹配的行后,返回该行中从某列开始的多个列的值。 然后,我需要处理可能的错误情况,比如查找值不存在,或者要返回的列数超出范围。这时候需要添加错误处理机制,比如使用On Error语句,或者返回特定的错误信息。 另外,考虑到VBA数组的处理,可能需要使用二维数组来存储多列的结果,并将结果作为数组公式返回到Excel中。这需要函数返回一个Variant类型的数组,并在Excel中使用Ctrl+Shift+Enter输入,不过现在新版Excel可能支持动态数组,不需要特别操作。 参考用户提供的引用内容,虽然主要涉及Vue和ESLint的问题,但其中提到扩展(extends/extend)的问题,可能需要注意函数命名和调用的正确性,避免拼写错误,比如确保函数名称正确,参数传递正确。 可能还需要考虑性能问题,如果数据量很大,循环可能会影响效率。这时候需要优化查找算法,比如使用字典对象来加快查找速度。 最后,测试函数是否正常工作,包括正常情况、边界情况和错误情况。例如,查找值存在时返回正确多列,不存在时返回错误信息,列数超出时处理等。</think>要扩展VBA中的XLOOKUP函数返回多列结果,可以通过自定义函数实现。以下是逐步实现方法: ### 1. **基础函数设计** 创建一个自定义函数`MultiXLOOKUP`,通过参数指定需要返回的列数: ```vba Function MultiXLOOKUP(lookup_value As Variant, lookup_array As Range, return_array As Range, num_cols As Integer) As Variant Dim result() As Variant Dim i As Long, j As Long Dim found_row As Long ' 查找匹配行 found_row = 0 For i = 1 To lookup_array.Rows.Count If lookup_array.Cells(i, 1).Value = lookup_value Then found_row = i Exit For End If Next i ' 错误处理 If found_row = 0 Then MultiXLOOKUP = CVErr(xlErrNA) Exit Function End If ' 提取多列数据 ReDim result(1 To 1, 1 To num_cols) For j = 1 To num_cols result(1, j) = return_array.Cells(found_row, j).Value Next j MultiXLOOKUP = result End Function ``` ### 2. **动态范围优化** 使用`Resize`方法支持动态列数,避免硬编码列限制: ```vba Function DynamicXLOOKUP(lookup_value As Variant, lookup_range As Range, return_start_col As Integer, num_cols As Integer) As Variant Dim target_row As Range Set target_row = lookup_range.Find(lookup_value, LookIn:=xlValues, lookat:=xlWhole) If Not target_row Is Nothing Then DynamicXLOOKUP = target_row.Offset(0, return_start_col - 1).Resize(1, num_cols).Value Else DynamicXLOOKUP = CVErr(xlErrNA) End If End Function ``` ### 3. **数组公式支持** 在Excel中使用时,选中目标区域后输入公式,按`Ctrl+Shift+Enter`(旧版本Excel需此操作): ```excel-formula =DynamicXLOOKUP(A2, Data!A:A, 2, 3) '返回从第2列开始的3列数据 ``` ### 4. **错误处理增强** 添加参数验证和溢出检查: ```vba If num_cols > return_array.Columns.Count Then MsgBox "请求列数超过数据范围", vbCritical Exit Function End If ``` ### 5. **性能优化建议** 对于大数据量(>10万行),建议: 1. 使用`Application.Match`替代循环查找 2. 禁用屏幕更新:`Application.ScreenUpdating = False` 3. 设置计算模式为手动:`Application.Calculation = xlCalculationManual` ### 注意事项 - 函数返回的是水平数组,若需要垂直排列可使用`TRANSPOSE`函数 - 在VBA编辑器中使用`@UDF`属性标记函数以支持动态数组(Excel 365+)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值