表格内容:
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
|