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

VBA 专栏收录该内容
13 篇文章 1 订阅

表格内容:

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
  • 7
    点赞
  • 0
    评论
  • 31
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值