• 使用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行代码将查询结果保存在工作表中。

  • 相关阅读:
    面试最常问的问题——被虐了之后,我翻烂了equals源码,总结如下
    KubeAdmin方式搭建K8S(1.26.0)
    分布式事务最终一致性的方案
    DeepSpeed: 大模型训练框架
    《巧用ChatGPT快速提高职场晋升力》书籍推荐【包邮送书五本】
    【Linux】让笔记本发挥余热,Ubuntu20.04设置WiFi热点
    QT课程 UI设计
    金仓数据库KingbaseES客户端编程接口指南-JDBC(2. 概述)
    GitHub仓库的README文件无法显示图片问题-非域名污染原因
    MySQL八股文背诵版(续)
  • 原文地址:https://blog.csdn.net/taller_2000/article/details/133475503