VBA调用Excel多条件筛选快速提取数据

实例需求:

工作簿中共有两个工作表:

  • 工作表明细用于保存原始数据表,如下图所示

  • 工作表查询A1单元格输入年份,点击查询按钮,在A2开始的单元格展示查询结果,如下图所示

示例代码如下:

vb 复制代码
Sub Demo()
    Dim oSht1 As Worksheet: Set oSht1 = Sheets("查询")
    Dim oSht2 As Worksheet: Set oSht2 = Sheets("明细")
    Dim sDate: sDate = oSht1.[a1]
    If Len(Trim(sDate)) = 0 Then Exit Sub
    If Not IsNumeric(sDate) Then Exit Sub
    If oSht2.AutoFilterMode Then
        If oSht2.AutoFilter.FilterMode Then
            oSht2.ShowAllData
        End If
    End If
    Dim c As Range: Set c = oSht2.Range("A2").CurrentRegion
    c.AutoFilter Field:=1, Criteria1:=">=" & sDate * 1000, _
        Operator:=xlAnd, Criteria2:="<" & (sDate + 1) * 1000
    oSht1.Range("A1").CurrentRegion.Offset(1).ClearContents
    c.Copy oSht1.Range("A2")
    oSht2.ShowAllData
End Sub

【代码解析】

第1行代码定义子过程 Demo,作为整个宏的入口,用于执行后续所有操作逻辑。

第2-3行代码声明工作表对象 oSht1和oSht2,并获取相应工作表对象的引用。

第4行代码声明变量 sDate,并将"查询"工作表 A1 单元格的值赋给该变量,作为筛选日期条件。

第5行代码判断变量 sDate 去除空格后长度是否为 0,如果为空则直接退出子过程,避免无效筛选。

第6行代码判断变量 sDate 是否为数值类型,如果不是数值则退出子过程,防止后续数值计算出错。

第7行代码判断"明细"工作表是否处于自动筛选模式。

第8行代码进一步判断当前是否存在已生效的筛选条件。

第9行代码在存在筛选条件的情况下,调用 ShowAllData方法清除原有筛选,确保后续筛选基于完整数据集。

第12行代码声明 Range 对象变量 c,并将其设置为"明细"工作表中从 A2 开始的当前连续数据区域。

第13~14行代码对数据区域 c 应用自动筛选条件,筛选第1列中大于等于 sDate * 1000 的记录,并且小于 (sDate + 1) * 1000,从而实现按指定日期范围筛选数据。

第15行代码清除"查询"工作表 A1 单元格当前区域中除标题行以外的内容,为新的筛选结果腾出空间。

第16行代码将筛选后的数据区域 c 复制到"查询"工作表的 A2 单元格开始的位置,用于显示查询结果。

第17行代码调用ShowAllData方法,清除"明细"工作表上的筛选状态,恢复显示全部数据。

相关推荐
Patrick在香港1 天前
pandas 读 CSV 不报错 ≠ 读对了:四个默认参数翻车实测
pandas·数据清洗·数据类型·实测·read_csv
MoRanzhi12032 天前
第 3 篇 · 数据清洗与特征工程:从问题判定到特征构建
python·pandas·数据清洗·特征工程·缺失值处理·异常值检测·特征编码
东莞市云毅网络有限公司4 天前
AI 引用句逐条回指原文:让回答可回溯的校验实现
python·数据清洗·rag·企业知识库·文档解析
mattleeee7 天前
回测数据清洗:如何处理缺失K线和异常数据
数据清洗·k线·异常数据
for_ever_love__9 天前
电商订单数据清洗实战——Pandas 处理缺失值、重复单与异常金额
python·数据分析·pandas·数据清洗
东莞市云毅网络有限公司25 天前
用 SQLite FTS5 给企业文档建本地全文索引:中文分词与权重调优
python·数据清洗·rag·企业知识库·文档解析
Patrick在香港1 个月前
Claude Prompt 香港场景:公文里「今日」落在 6 个日历日上,「翌日」锚错了 5 天
python·自然语言处理·正则表达式·claude·数据清洗
2601_962382431 个月前
Python自动化办公实战指南:从入门到精通
数据清洗·python自动化办公·报表生成·文档处理·邮件分发
沙淘金数据服务1 个月前
电商订单数据整合难题拆解:多源异构数据如何实现自动化治理?
大数据·人工智能·数据治理·数据清洗·电商·外贸
东莞市云毅网络有限公司1 个月前
企业非结构化资料拆分成可引用片段:一套能跑通的预处理流水线
python·数据清洗·rag·企业知识库·文档解析