如何用VBA代替VLOOKUP函数?
Excel VBA经典代码应用大全
作者:Excel Home
一盏离愁 孤单伫立在窗口 我在门后 假装你人还没走
东风破 周杰伦 - 叶惠美
哈罗,大家好,我是星光,今天和大家分享的主题是数据查询……
数据查询有很多种,比如单条件查询、多条件查询、多结果查询、模糊条件查询、跨表、跨文件数据查询……等等……我们不可能用一篇文章一股脑的全部说完,所以先从最简单的分享起……
举个简单的小栗子。
如下图所示,需要根据A1:C7的数据明细,计算出A10:C11相关考号的人员姓名。
这就是所谓的单条件单结果数据查询了。
这事儿如果用函数解决,那自然是VLOOKUP的菜呗:
=IFERROR(VLOOKUP(A11,A$1:C$7,3,0),'')
如果用VBA代码实现VLOOKUP函数的效果,代码如下:
Sub DctFind()
'Excelhome vba编程学习与实践~看见星光
Dim d As Object, arr, brr, i&
Set d = CreateObject('scripting.dictionary')
'd.CompareMode = vbTextCompare '不区分字母大小写
arr = [a1:c7]
'数据源装入数组arr
brr = [a10:c13]
'查询区域数据装入数组brr
For i = 1 To UBound(arr)
'遍历数组arr
d(arr(i, 1)) = arr(i, 3)
'将考号作为key,姓名作为item装入字典
Next
For i = 2 To UBound(brr)
'标题行不用查询,所以从第二行开始遍历查询数值brr
If d.exists(brr(i, 1)) Then
'如果字典中存在考号
brr(i, 2) = d(brr(i, 1))
'根据考号从字典中取值
Else
brr(i, 2) = ''
'如果字典中不存在相关考号,则值返回为假空
End If
Next
With [a10:c13]
.NumberFormat = '@'
'设置文本格式,避免某些文本数值变形
.Value = brr
'结果数组写入单元格区域
End With
MsgBox '查询完成。'
Set d = Nothing
'释放字典
End Sub
代码解析见注释,另外...▼
1,该段代码区分字母大小写,即A和a作为查询值时,并不相等。如果需要不区分字母大小写,解除代码中下面语句的注释块。
d.CompareMode vbTextCompare
2,留个练手题吧,如下图所示,需要根据A1:C13数据明细,计算A15:C18相关人员指定课目的成绩。