诸君好,今天和大家分享的主题是数据查询……
数据查询有很多种,比如单条件查询、多条件查询、多结果查询、模糊条件查询、跨表、跨文件数据查询……等等……我们不可能用一篇文章一股脑的全部说完,所以先从最简单的分享起……
举个简单的小栗子。
如下图所示,需要根据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("ing.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装入字典
For i = 2 To UBound(brr)
'标题行不用查询,所以从第二行开始遍历查询数值brr
If d.exists(brr(i, 1)) Then
'如果字典中存在考号
brr(i, 2) = d(brr(i, 1))
'根据考号从字典中取值
brr(i, 2) = ""
'如果字典中不存在相关考号,则值返回为假空
End If
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相关人员指定课目的成绩。
图文作者:看见星光
返回搜狐,查看更多
责任编辑:
平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。