如何复制Excel中符合条件的数据:列A为当月日期且列E<99.96的A、D、E列
实现日期与数值双条件筛选并提取指定列数据
方法1:Excel动态公式提取(适用于365/2021及以上版本)
直接在空白单元格输入公式,即可自动提取符合条件的A、D、E列数据:
=CHOOSECOLS(FILTER(A:E, (MONTH(A:A)=MONTH(TODAY()))*(YEAR(A:A)=YEAR(TODAY()))*(E:E<99.96), "无符合条件数据"), 1,4,5)
MONTH(A:A)=MONTH(TODAY())+YEAR(A:A)=YEAR(TODAY()):精准匹配当前年月的日期,避免跨年同月份干扰E:E<99.96:匹配数值小于99.96的条件CHOOSECOLS:从筛选结果中提取第1、4、5列(对应A、D、E列)
方法2:高级筛选(兼容全版本Excel)
- 构建条件区域:在空白区域输入
- 第一行:与数据区域A、E列完全一致的标题
- 第二行:
=MONTH(TODAY())、<99.96
- 选中数据区域,点击「数据」选项卡→「高级」筛选
- 在弹窗中设置:
- 列表区域:选择完整数据范围(如
$A$1:$E$1000) - 条件区域:选择刚才构建的条件范围
- 勾选「将筛选结果复制到其他位置」,指定结果起始单元格
- 列表区域:选择完整数据范围(如
- 确定后手动删除不需要的列,保留A、D、E列即可
方法3:VBA脚本自动化处理
如果需要批量重复执行,可使用以下脚本:
Sub FilterAndExtract() Dim ws As Worksheet Dim lastRow As Long Dim destRow As Long Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row destRow = 1 ' 可修改为结果存放的起始行 ' 双条件自动筛选 ws.Range("A1:E" & lastRow).AutoFilter Field:=1, Criteria1:=">=" & DateSerial(Year(Date), Month(Date), 1), _ Operator:=xlAnd, Criteria2:="<=" & DateSerial(Year(Date), Month(Date) + 1, 0) ws.Range("A1:E" & lastRow).AutoFilter Field:=5, Criteria1:="<99.96" ' 复制筛选后的A、D、E列到G列起始位置 ws.Range("A:A,D:D,E:E").SpecialCells(xlCellTypeVisible).Copy ws.Cells(destRow, "G") ' 取消筛选状态 ws.AutoFilterMode = False End Sub
使用方式:按Alt+F11打开VBA编辑器,插入模块粘贴代码,运行即可。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

