「vba」[Excel VBA]用字典处理多条件查询问题_职场小白网

希望能帮助各大职场小白解决办公问题,如Excel,PPT,word等软件问题,或者提供职场各种报告的样本参考,职场生存法则~~~~职场小白网

您现在的位置是:职场小白网 > 办公软件 > Excel >

[Excel VBA]用字典处理多条件查询问题

2018-04-06 07:55:19Excel 人已围观


我们今天分享的内容是使用VBA代码实现多条件查询的功能。

如下图所示。表名为“明细表”的数据是明细数据。


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

现在我们需要根据查询表的姓名和课目两个条件。在明细表中查询相关的成绩。
对于VBA来说。处理这样的问题总是有一个固定的套路。确定条件关系后。将明细数据循环装入字典。其中明细表的条件作为关键字(Key)。需要查询的结果作为条目(Item)。最后遍历查询表。根据提取相应的结果。
代码如下:

Sub DicFind()
Dim d As Object, arr, brr, i&, j&, k&, s$
Set d = CreateObject("ing.dictionary")
'后期引用字典
'd.CompareMode = vbTextCompare
'不区分字母大小写
arr = Sheets("明细表").[a1].CurrentRegion
'明细数据装入数组arr
For i = 2 To UBound(arr)
'遍历数组arr。将数据装入字典。以备查询
'标题行不要。从第二行开始遍历
For j = 2 To UBound(arr, 2)
'标题列不要。从第二列开始遍历
s = arr(i, 1) & "@" & arr(1, j)
'姓名@课目是查询条件。作为字典的key值
d(s) = arr(i, j)
'成绩是查询的结果。作为字典的item
Next
Next
brr = Sheets("查询表").[a1].CurrentRegion
'查询区域的数据装入数组brr
For i = 2 To UBound(brr)
s = brr(i, 1) & "@" & brr(i, 2)
'合并查询的两个条件成为一个条件字符串。姓名@课目
For j = 3 To UBound(brr, 2)
If d.exists(s) Then
'如果字典中存在变量s
brr(i, j) = d(s)
'从字典中取s对应的条目
Else
brr(i, j) = ""
'否则返回假空
End If
Next
Next
Sheets("查询表").[a1].CurrentRegion = brr
'将数组brr放回查询区域
MsgBox "查询OK"
Set d = Nothing
'释放字典内存
End Sub


小贴士:
1。对于字典查询法来说。其实大部分情况下。并不存在多条件查询的问题。把多个条件合并成一个条件表达式。那就是单条件查询。
2。需要注意的是。该段代码区分字母大小写。也就是说“VBA”并不等同于“vba”。如果需要不区分字母大小写。取消代码中以下语句的注释。
'd.CompareMode =vbTextCompare '不区分字母大小写
3。留个练手题。使用VBA代码实现条件求和和计数。
如下图所示。根据A:B列的数据。计算D列人员的考试次数和考试成绩


测试及练习文件:
http://pan.baidu.com/s/1slv74qp


本文标题:[Excel VBA]用字典处理多条件查询问题

文章来源:http://www.excelhome.net/lesson/article/excel/1916.html

Tags:

上一篇:没有了

下一篇:没有了

标签云

站点信息

  • 文章统计26234篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们