Excel VBA小程序 -使用VBA实现VLOOKUP函数查询?

表格内容:

A列 B列 C列 D列 E列 F列
姓名 出生日期 年龄 姓名 年龄
杨春海 1987-6-22 33 许文武
赵春雨 1980-9-17 39 刘永江
李美桥 1998-4-12 22
刘永江 1992-3-17 28
许文武 1987-4-13 33
刘景瑞 1994-7-27 26

如果用VLOOKUP函数解决:

=IFERROR(VLOOKUP(A11,A$1:C$7,3,0),"")

如果使用VBA代码解决:

Sub DctFind()
    Dim d As Object, arr, brr, i&
    Set d = CreateObject("scripting.dictionary")
    d.CompareMode = vbTextCompare
    '-----------------------------------------------------------------------------------------------------------------------------------
    '装入: 数据源装入数组arr, 查询区域数据装入数组brr,遍历数组arr,UBound(arr)表示数组arr的最大行号。将学号作为key,姓名作为item装入字典
    arr = [a1:c7]
    brr = [e1:f5]
    For i = 1 To UBound(arr)
        d(arr(i, 1)) = arr(i, 3)
    Next
    '-----------------------------------------------------------------------------------------------------------------------------------
     '遍历:标题行不用查询,从第二行开始遍历查询数值brr,如果字典中存在考号,根据考号从字典中取值。如果字典中不存在相关考号,则值返回为空
    For i = 2 To UBound(brr)
        If d.exists(brr(i, 1)) Then
            brr(i, 2) = d(brr(i, 1))
        Else
            brr(i, 2) = ""
        End If
    Next
    '-----------------------------------------------------------------------------------------------------------------------------------
    '写入:设置文本格式,避免某些文本数值变形,结果数组写入单元格区域,释放字典
    With [e1:f5]
        .NumberFormat = "@"
        .Value = brr
    End With
    MsgBox "查询完成。"
    Set d = Nothing
'   '-----------------------------------------------------------------------------------------------------------------------------------
End Sub

小贴士:

1>该段代码区分字母大小写,即A和a作为查询值时,并不相等。如果需要不区分字母大小写,解除代码中下面语句的注释块。

d.CompareMode vbTextCompare

你可能感兴趣的:(VBA,excel)