如何合并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
相关产品推荐
相关产品推荐

