Xlookup、Vlookup请走开,万能的Wlookup函数来了!

本文介绍了一种名为Wlookup的强大查找函数,它是Mlookup的升级版,功能超越了Xlookup。Wlookup支持多种查找模式,包括查找第一个、最后一个、第N个符合条件的值,一对多查找,区间查找等。通过简单的步骤即可在Excel中使用此函数。

前天,为大家介绍了关于Vlookup接班人Xlookup函数的介绍,一方面惊叹于Xlookup强大的查找功能,另一方面也担心自已只能远观而不能使用。毕竟付费office365的用户占极少数。点击进入查看>>

那怎么办?下面为大家编写了一个比Xlookup更强大的查找函数,它就是Mlookup的升级版:

Wlookup函数

一、 用法介绍

= Wlookup(查找内容,查找值范围,返回值范围,查找模式)

语法说明:

    • 查找内容:查找的值

    • 查找值范围:在该区域/数组中查找

    • 返回值范围:根据在第2个参数中查找结果,返回该数组中对应位置的值

    • 查找模式:

          -2 是区间查找

          -1 是一对多查找

           0 查找最后一个

           N 查找第N个符合条件的值

二、 功能演示

1、 查找第1个符合条件的值

=Wlookup(A11,A2:A7,C2:C7)

Wlookup函数

2、 从右向左查找

=Wlookup(A11,B2:B7,A2:A7)

Wlookup函数

3、 按行上下查找

=Wlookup(B5,A1:D1,A2:D2)

Wlookup函数

4、 多条件查找

=Wlookup(A11&B11,A2:A7&B2:B7,D2:D7)

注:多条件查找只需要用&连接即可。

Wlookup函数

5、 查找第N个符合条件的值

=Wlookup(A11,B2:B7,C2:C7, N)

如查找第2个

=Wlookup(A11,B2:B7,C2:C7, 2)

注:最后一个参数是正整数时,查找返回对应第N个符合条件的值。如果是多列查找第N个,也只需用&连接即可,同4。

Wlookup函数

6、 查找最后一个

=Wlookup(A11,B2:B7,C2:C7,0)

注:第4个参数为0时,查找最后一个

Wlookup函数

7、 一对多查找

Wlookup可以同时返回所有符合条件的结果,并用逗号连接。

=Wlookup(A11,B2:B7,C2:C7,-1)

注:第4个参数为-1时,为一对多查找

Wlookup函数

8、 区间查找

=Wlookup(A11,A2:A7,B2:B7,-2)

注:当第4个参数为-2时,可以实现区间匹配查找。

Wlookup函数

9、 扩展应用:筛选功能

=IFERROR(Wlookup($A$11,$B$2:$B$7,A$2:A$7,ROW(A1)),"")

注:因为Wlookup可以返回第N个值,所以这里用row函数就可以逐个返回所有值。

Wlookup函数

筛选演示:

Wlookup函数

三、 使用方法

Wlookup要想在你的表格中也能使用,需要按下面的步骤操作。

1、 按alt+F11(或任一工作表标签右键 - 查看代码)会打开VBE窗口,在窗口中点插入 - 模块。把下面的代码复制粘贴到右侧的空白区域中。

Excel

代码(本文最后附下载地址)

Function Wlookup(V, vY, vh, Optional m)

 Dim arr, arr1, arr2()

 Dim k As Integer

 arr = vY

 arr1 = vh

       If UBound(arr1) = 1 Then

       arr1 = Application.Transpose(arr1)

       arr = Application.Transpose(arr)

       End If

ReDim arr2(1 To 1)

 For x = 1 To UBound(arr1)

    If arr(x, 1) = V Then

       Wlookup = arr1(x, 1)

       If IsMissing(m) Then

         Exit Function

       Else

        k = k + 1

        ReDim Preserve arr2(1 To k)

        arr2(k) = arr1(x, 1)

       End If

    End If

  Next x

  If m = 0 Then

    Wlookup = arr2(k)

  ElseIf m = -1 Then

   Wlookup = Join(arr2, ",")

  ElseIf m = -2 Then

   Wlookup = JS(V, vY, vh)

  Else

    Wlookup = arr2(m)

  End If

End Function

 

Function JS(J1, R1, R2) '取接近值

Dim Jarr1, Jarr2

Dim x

 Jarr1 = R1

 Jarr2 = R2

 

For x = 1 To UBound(Jarr1)

  If x + 1 > UBound(Jarr1) Then

       JS = Jarr2(x, 1)

       Exit Function

  ElseIf J1 >= Jarr1(x, 1) And J1 < Jarr1(x + 1, 1) Then

       JS = Jarr2(x, 1)

       Exit Function

  End If

Next x

End Function

2、 当前文件另存为“启用宏的工作簿”格式

Excel

以后这个工作簿中就可以正常使用Wlookup函数了

综合Mlookup和Xlookup的优点,升级成了Wlookup函数,可以说功能上比前2个函数都要强大。

本文示例附件下载地址:(百度网盘,复制到电脑浏览器地址栏中回车打开)

链接:https://pan.baidu.com/s/1wsbtd2LGoDTUA5j9mOE9cg 提取码: quju 

### XLOOKUP 函数VLOOKUP 函数的区别 #### 定义与功能 XLOOKUP 是 Excel 中较新的查找函数,相较于传统的 VLOOKUP 提供了更灵活的功能。VLOOKUP 主要用于垂直方向上的查找,即在一个表格中按列进行匹配并返回指定列的数据[^1]。然而,它存在一些局限性,例如只能向右查找目标值所在列之后的列数据。 XLOOKUP 则突破了这一限制,不仅可以执行纵向查找,还支持双向查找(既可以向下也可以向上),并且能够直接返回任意位置的结果而不局限于右侧列[^3]。 #### 参数结构对比 以下是两种函数的基本语法形式: 对于 **VLOOKUP**: ```excel =VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]) ``` 而对于 **XLOOKUP**,其参数更加直观易懂: ```excel =XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode]) ``` 通过以上可以看出,XLOOKUP 不仅简化了输入过程而且增强了可读性和控制力,允许设置未找到项时的行为以及精确度模式等选项[^2]. #### 性能表现 当处理大数据集时,VLOOKUP 可能会因为需要不断扫描整个数组而导致效率低下;相比之下,XLOOKUP 更加高效因为它只遍历必要的部分即可完成任务[^3]. 此外,在面对复杂需求如逆向查询或多条件组合检索方面,XLOOKUP 显示出了极大的优势——它可以轻松应对从最后一行向前寻找第一个符合条件记录之类的要求,而这些都是传统方法难以做到或者非常麻烦才能实现的操作[^1]. ### 使用场景分析 - 如果只是简单的单字段正向关联,并且工作簿兼容性考虑较为重要的话,则可以选择保留下来的经典版VLOOKUP; - 对于现代版本Office用户来说,推荐优先采用XLOOKUP来进行各种类型的资料定位活动,无论是基础还是高级应用场合都能胜任愉快[^2]^. 总之,虽然两者都可以满足基本的数据查寻需求,但从灵活性、功能性乃至性能层面考量,显然新推出的XLOOKUP更具竞争力和适应范围广的特点[^3]. ```python # 示例代码展示如何使用Python pandas库模拟Excel中的这两种查找方式 import pandas as pd data = {'ID': [101, 102, 103], 'Name': ['Alice', 'Bob', 'Charlie'], 'Score': [85, 90, 78]} df = pd.DataFrame(data) def vlookup_style(df, id_to_find): result = df[df['ID'] == id_to_find]['Name'].values[0] return result print(vlookup_style(df, 102)) # 输出 Bob from numpy import nan def xlookup_style(search_key, search_range, return_range, default=nan): mask = (search_range == search_key) res = return_range[mask].iloc[-1] if any(mask) else default return res print(xlookup_style(102, df.ID, df.Name)) # 同样输出 Bob ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值