• <tr id="7cd0f39e"><strong id="66bf27cb"></strong><small id="73b40aeb"></small><button id="632e466d"></button><li id="5a31bbb7"><noscript id="5b37b5a3"><big id="7c4f118b"></big><dt id="5e9f093b"></dt></noscript> </tr><ol id="7bf30cb"><option id="812e608"><table id="2b5b1c45"><blockquote id="5cab8778"><tbody id="6f0495d7"></tbody></blockquote></table></option></ol><u id="7a6304e6"></u><kbd id="484239ea"><kbd id="1f0274fa"></kbd></kbd>
  • 千赢国际教程下载和软件下载中心,Microsoft技术社区联盟成员,全球极具影响力的千赢国际门户,Office技术培训社区

    [千赢国际 VBA]用字典处理多条件查询问题

    2018-10-28  作者:千赢国际Home  阅读:

    我们今天分享的内容是使用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列人员的考试次数和考试成绩


    测试及练习文件:



    转载请注明来源"千赢国际Home"并保留原文链接。
    固定链接:http://ryansdrew.com/lesson/article/excel/1916.html
    分享到:
    Copyright 1999 - 2017 千赢国际 Home.All Rights Reserved.
    本站特聘法律顾问:徐怀玉律师 李志群律师   沪ICP备11019229号
           
    网站地图