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

表格内容:

A列B列C列D列E列F列
姓名出生日期年龄姓名年龄
杨春海1987-6-2233许文武
赵春雨1980-9-1739刘永江
李美桥1998-4-1222
刘永江1992-3-1728
许文武1987-4-1333
刘景瑞1994-7-2726

如果用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
  • 11
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值