诸君好,今天和大家分享的主题是数据查询……

数据查询有很多种,比如单条件查询、多条件查询、多结果查询、模糊条件查询、跨表、跨文件数据查询……等等……我们不可能用一篇文章一股脑的全部说完,所以先从最简单的分享起……

举个简单的小栗子。

如下图所示,需要根据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相关人员指定课目的成绩。

图文作者:看见星光 返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。