You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并VBA宏以同时筛选Excel中今日与明日的日期?

合并VBA宏实现同时筛选今日和明日日期

你原来的TodayTomorrow()宏会先筛选今日日期,再筛选明日日期,第二次筛选会直接覆盖第一次的结果,所以最终只能看到明日的数据。要实现同时筛选今日和明日的日期,不需要分开调用两个子宏,直接在一个宏里完成多条件筛选即可:

Sub TodayTomorrow()
    Dim targetWs As Worksheet
    Dim filterRange As Range
    Dim todayDt As Date
    Dim tomorrowDt As Date
    
    ' 指定目标工作表
    Set targetWs = ThisWorkbook.Worksheets("STG_SB_OPICS_DTL")
    ' 获取今日和明日的日期
    todayDt = Date
    tomorrowDt = Date + 1
    
    ' 定义筛选范围:从第4行D列到D列最后一行有数据的单元格
    Set filterRange = targetWs.Range(targetWs.Cells(4, "D"), targetWs.Cells(targetWs.Rows.Count, "D").End(xlUp))
    
    ' 清除已有筛选(如果存在)
    If targetWs.AutoFilterMode Then targetWs.AutoFilterMode = False
    
    ' 应用多日期筛选
    filterRange.AutoFilter _
        Field:=1, _
        Criteria1:=Array(todayDt, tomorrowDt), _
        Operator:=xlFilterValues
End Sub

关键说明:

  • 直接计算Date(今日)和Date + 1(明日)的日期值,避免多次筛选覆盖的问题
  • 先清除原有筛选,确保新的筛选条件能正确应用
  • 使用Array()将两个日期作为筛选条件,配合Operator:=xlFilterValues实现同时匹配多个日期的效果

如果你的单元格日期包含时间部分,需要调整筛选逻辑来匹配日期区间:

Sub TodayTomorrowWithTime()
    Dim targetWs As Worksheet
    Dim filterRange As Range
    Dim todayStart As Date
    Dim dayAfterTomorrowStart As Date
    
    Set targetWs = ThisWorkbook.Worksheets("STG_SB_OPICS_DTL")
    todayStart = Date
    dayAfterTomorrowStart = Date + 2
    
    Set filterRange = targetWs.Range(targetWs.Cells(4, "D"), targetWs.Cells(targetWs.Rows.Count, "D").End(xlUp))
    
    If targetWs.AutoFilterMode Then targetWs.AutoFilterMode = False
    
    ' 筛选今日00:00到后天00:00之间的日期(包含今日和明日全天)
    filterRange.AutoFilter _
        Field:=1, _
        Criteria1:=">=" & CLng(todayStart), _
        Operator:=xlAnd, _
        Criteria2:="<" & CLng(dayAfterTomorrowStart)
End Sub

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:05:24