比VLOOKUP函数好用十倍的自定义函数



比VLOOKUP函数好用十倍的自定义函数

同学们好啊,VLOOKUP函数是表亲们的大众情人,查找数据的时候经常会用到。

但是这个函数也有两处明显的缺陷:

一是不能从右向左查询,

二是不能返回多个结果。

这两个问题想必困扰了表哥表妹好多年啊。今天就和大家分享一个自定义函数——LOOK,先来看看使用方法:

比VLOOKUP函数好用十倍的自定义函数

G2 单元格公式为:

=LOOK($F$2,C:C,2,ROW(A1))

这个自定义函数的参数和VLOOKUP函数类似:

第一参数是要查询的内容,

第二参数是包含查询值的数据列,

第三参数是要返回第几列的内容,

第四参数使用ROW(A1)生成一个连续的序号。

向下复制公式,即可实现一对多查询。

如果要从右向左查询,只要修改一下第三参数,使其变成负数即可:

比VLOOKUP函数好用十倍的自定义函数

看到这里,是不是有点眼红了?

接下来看看如何使用这个自定义函数:

步骤1 右键单击工作表标签→查看代码

比VLOOKUP函数好用十倍的自定义函数

步骤2 在VBE窗口中依次单击【插入】→【模块】,然后在右侧的模块代码窗口中输入自定义代码:

比VLOOKUP函数好用十倍的自定义函数

以下代码可复制:

Function LOOK(查找值 As String, 区域 As Range, Optional 列 As Integer = 2, Optional 索引号 As Integer = 1) As String

Application.Volatile

Dim i As Long, cell As Range, Str As String

With 区域(1).Resize(区域.Rows.Count, 1)

If .Cells(1) = 查找值 Then Set cell = .Cells(1) Else Set cell = .Find(查找值, LookIn:=xlValues)

If Not cell Is Nothing Then

Str = cell.Address

Do

i = i + 1

If i = 索引号 Then LOOK = cell.Offset(0, 列 - 1): Exit Function

Set cell = 区域.Find(查找值, cell)

Loop While Not cell Is Nothing And cell.Address <> Str

End If

End With

End Function

步骤3 按F12键,将文件保存为.xlam格式。

以后可以先打开这个加载宏文件,然后再打开需要处理的文档,就可以使用自定义函数了。

代码作者: ExcelHome论坛版主 罗刚君

图文整理:祝洪忠


0