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方法,清除"明细"工作表上的筛选状态,恢复显示全部数据。

相关推荐
Blockbuater_drug16 小时前
《经典机器学习实战》第 1 课:导论——是什么、简史、负责任 AI 与标准流程
机器学习·scikit-learn·监督学习·数据清洗·过拟合·训练集测试集·公平性
Frag0ut1 天前
Notepad++ 正则表达式完全手册:文本处理的终极武器(2026实战版)
正则表达式·notepad++·数据清洗·日志分析·正则替换·提取ip·正则表达式实战
梯度下降者2 天前
Python使用统计建模解决业务预测问题的常见操作步骤【教程】
python·可解释性·数据清洗·模型选择·业务预测
东莞市云毅网络有限公司19 天前
监测问句清单去重:停用词表、数字归一与贪心聚类的参数取法
python·数据清洗·rag·企业知识库·文档解析
Helix25020 天前
Python数据分析实战:Pandas清洗豆瓣短评与情感分析完整指南
python·pandas·数据清洗·情感分析··snownlp·文本数据处理
青山科技分享20 天前
外贸获客AI怎么选型?从功能到落地一次讲清
邮件·外贸·筛选
星夜离尘5620 天前
MATLAB 清洗 CSV 采样日志:重复时间戳、无效行、分组统计与自动出图
开发语言·matlab·数据分析·数据清洗·csv
东莞市云毅网络有限公司20 天前
用 Python 给官网做字段级变更监控:快照、比对与变更清单
python·数据清洗·rag·企业知识库·文档解析
梅雅达编程笔记20 天前
15_综合实战全流程
pandas·数据清洗·seaborn·可视化分析·python数据实战·数据分析全流程·系列收尾
Patrick在香港23 天前
pandas 读 CSV 不报错 ≠ 读对了:四个默认参数翻车实测
pandas·数据清洗·数据类型·实测·read_csv