打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA常用小代码303:用字典处理多条件查询问题




 

我看见那美丽月亮……也看见你多情眼光……它让我幻想……让我想去飞翔……忘记忧伤……

困……来首歌提提神先……

嗯,我们今天分享的内容是使用VBA代码实现多条件查询的功能,照例举个栗子。

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


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


现在我们需要根据查询表的姓名和课目两个条件,在明细表中查询相关的成绩。

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

代码如下:

 


Sub DicFind()

    Dim d As Object, arr, brr, i&, j&, k&, s$

    Set d = CreateObject('scripting.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列人员的考试次数和考试成绩

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel VBA小程序
【Excel VBA】用字典处理多条件查...
看完这篇,如果你还不懂VBA字典,那我就没办法了
3段VBA代码,从此不再「复制-粘贴」
自己写的,用VBA提取多列唯一值,有点开心,小成就
字典去重冒泡排序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服