VBA:类似VLOOKUP查询

以下VBA自定义函数(命名为LOOK)实现对VLOOKUP的补充,也可以修改参数后替代VLOOKUP函数(完全可以替代)使用:

Function LOOK(Czz As String, Rg As Range, vi As Integer, Bi As Integer) As String
    Application.Volatile
    On Error Resume Next
    Dim i, j As Long
    For i = 1 To Rg.Rows.Count
        If Rg(i, 1) = Czz Then j = j + 1
        If j = Bi Then
        LOOK = Rg(1).Offset(i - 1, vi): Exit Function
        End If
    Next i
End Function

使用方法:复制上面的宏语句,粘贴到您的宏模块中,然后用LOOK函数公式实现查找。
LOOK(参照值, 区域, 列数 ,1或从1开始的自然数),如:
=LOOK(F$2,B$1:E$218,2,ROW(A1))或
=LOOK(F2,B$1:E$218,2,1)

自定义LOOK函数参数注解:
1、参照值:跟VLOOPUP的第一个参数一样
(1)如果需要查找出跟第一个参数关联的所有值,那这个参数需要锁定单元格,如B$2或$B$2,同时第4个参数为1开始的自然数(变量),可直接用ROW(A1);
(2)如果只需要实现跟VLOOKUP函数一样的效果,那第一个参数和常规单元格引用一样,但第4个参数必须是“1”;

2、区域:

这个区域只需要包含索引值那一中你需要的区域(注意需锁定),如果向右侧查找,你也可以按VLOOKUP的习惯,选多一些连续列,其实没那个必要;

3、列数:
区域本身这一列是0,
向右侧第一列是1,第2列是2,以此类推;
向左侧第一列是-1,第2列是-2,以此类推;

4、第4个参数:
(1)如果按VLOOKUP的习惯查找,就是“1”;
(2)如果需要查找跟索引值关联的全部值,就直接变量ROW(A1)

如果需要完全按VLOOKUP的列习惯(从查找列开始,第1列是1,第2列是2),你可以修改第8行语句为:

LOOK = Rg(1).Offset(i - 1, vi - 1): Exit Function