您的位置:首页 > 编程语言 > VB

【VBAPlanet】如何用字典处理多条件查询

2020-04-25 18:59 1011 查看


欢迎来到VBAPlanet!
今天和给你分享的内容是使用VBA中的字典来实现多条件数据查询的功能。

如下图所示,各位英雄课程成绩的明细数据存在表名为“明细表”的表格中。

再如下图所示,表名为“查询表”的数据是需要查询的数据。

现在我们需要根据查询表的姓名(name)和课目(course)两个条件,在明细表中查询对应的成绩(score)。
效果演示:

对于VBA来说,处理这样的问题总是有一个固定的套路,确定条件关系后,将明细数据循环装入字典,其中明细表的条件作为关键字(Key),需要查询的结果作为条目(Item),最后遍历查询表,根据条件提取相应的结果。
字典的数据结构可以解释为下图这个样子,Key和Item是一一对应的关系。

代码如下:

Sub DicFind()
Dim dic As Object, arr1, arr2
Dim num1 As Integer, num2 As Integer, str As String
Set dic = CreateObject("scripting.dictionary")
'设置字典对象,用于后面引用字典
'dic.CompareMode = vbTextCompare
'不区分字母大小写
arr1 = Sheets("明细表").[A1].CurrentRegion
'把明细表数据装进数组arr1
For num1 = 2 To UBound(arr1)
'遍历数组arr1,将数据装入字典,以备查询
'标题行不要,所以从第二行开始遍历
str = arr1(num1, 2) & "@" & arr1(num1, 3)
'合并两个条件查询成为一个条件字符串,使用name@course字符串作为字典的key
dic(str) = arr1(num1, 4)
'score是查询的结果,作为字典的item
Next
arr2 = Sheets("查询表").[A1].CurrentRegion
'查询区域的数据装入数组arr2
For num2 = 2 To UBound(arr2)
str = arr2(num2, 2) & "@" & arr2(num2, 3)
'合并查询两个条件成为一个条件字符串,name@course
If dic.exists(str) Then
'如果字典key中存在变量str
arr2(num2, 4) = dic(str)
'从字典中取str对应的item
Else
arr2(num2, 4) = ""
'否则返回空值
End If
Next
Sheets("查询表").[A1].CurrentRegion = arr2
'将数组arr2放回查询区域
MsgBox "哇哦,查询完毕啦", 64
Set dic = Nothing
'释放字典内存
End Sub

禅定时刻
1.对于字典查询法来说,其实大部分情况下,并不存在多条件查询的问题,把多个条件合并成一个条件表达式,甚至是一个字符串,那就是单条件查询。

2.需要注意的是,该段代码区分字母大小写,也就是说“VBA”并不等同于“vba”,如果需要不区分字母大小写,取消代码中以下语句的注释。

dic.CompareMode = vbTextCompare '不区分大小写

案例文件:
链接:https://pan.baidu.com/s/1bBzluklrAcCvwVoEOlQXTA
提取码:s7bz

如果觉得不错,欢迎点赞转发。

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
海林Lin-Westome 发布了8 篇原创文章 · 获赞 6 · 访问量 316 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐