Excel VBA小程式 -使 用VBA實現VLOOKUP函式查詢?

Nemuel發表於2020-10-02

表格內容:

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

相關文章