• 使用VBA实现快速模糊查询数据


    实例需求:基础数据保存在Database工作表中,如下图所示。
    在这里插入图片描述
    基础数据有37个字段,上图仅展示部分字段内容,下图中黄色字段为需要提取的数据字段。
    在这里插入图片描述

    Search工作表B1单元格输入查询关键字TitleGenre字段中搜索关键字,包含关键字的数据提取Search工作表,从第4行开始保存查询结果,如下图所示。
    在这里插入图片描述

    示例代码如下。

    Sub Demo()
        Dim res(), arr, cols
        dim lngLstRow as long
        dim strKey as String
        dim intIndex as Integer
        dim i as long, j as Integer
        lngLstRow = Sheets("Database").Cells(Rows.Count, 1).End(xlUp).Row
        arr = Sheets("Database").Range("A2:I" & lngLstRow)
        ReDim res(1 To lngLstRow, 1 To 6)
        intIndex = 1
        cols = Array(1, 3, 5, 7, 8, 9)
        strKey = Sheets("Search").[b1]
        For i = 1 To lngLstRow - 1
            If InStr(1, arr(i, 3) & arr(i, 5), strKey) > 0 Then
                For j = 1 To 6
                    res(intIndex, j) = arr(i, cols(j - 1))
                Next
                intIndex = intIndex + 1
            End If
        Next
        If intIndex > 1 Then
            With Sheets("Search")
                .Range("4:10000").Clear
                .Range("A4").Resize(intIndex, 6).Value = res
            End With
        End If
    End Sub
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    【代码解析】
    第7行代码获取基础数据的最后一行所在行号。
    第8行代码读取A列到I列数据,由于基础数据字段很多,全部加载到数据中,将占用更多内存,可能导致运行效率下降,因此只加载需要提取部分。
    第9行代码重新声明动态数组res用于保存查询结果。
    第10行代码设置变量intIndex用于指示数组res中的写入位置。
    第11行代码创建数组保存需要提取的列号,这样可以简化提取数据的代码(第15~17行代码)。
    第12行代码读取查询关键字。
    第13~20行代码循环处理每行数据。
    第14行代码判断知道字段是否包含查询关键字,arr(i, 3) & arr(i, 5)将两个字段合并为一个字符串,这样调用一次Instr函数就可以完成查询。
    第15~17行代码提取指定的字段,保存到数组res中。
    第18行代码变量累加1,指向下一个保存位置。
    第22行代码情况保存查询结果单元格区域。
    第23行代码判断是否有符合查询添加的结果,如果满足条件,第24行代码将查询结果保存在工作表中。

  • 相关阅读:
    JAVA自行车在线租赁管理系统2021计算机毕业设计Mybatis+系统+数据库+调试部署
    归并排序~
    Python突破浏览器TLS/JA3 指纹
    MeterSphere 至学篇
    【Eye-tracking】DIDEC: The Dutch Image Description and Eye-tracking Corpus
    SSR服务器端渲染
    知识图谱从入门到应用——知识图谱推理:基于符号逻辑的知识图谱推理
    2023年中国位置服务(LBS)产业链及市场规模分析[图]
    蓝桥杯:分巧克力
    [UE][UE5]Gameplay框架,Actor,pawn,playerController(玩家控制器),Character(角色)之间的关系
  • 原文地址:https://blog.csdn.net/taller_2000/article/details/133475503