看到一个帖子《excel吧-筛选开始时间,结束时间范围内的所有记录》,根据条件表中的开始时间和结束时间构成的时间范围,对数据表中的开始时间和结束时间范围内的数据进行筛选
目录
批量删除整行,整体删除批量删除整行,分段删除不同分段行数速度对比
数据举例 条件表中,开始时间为随机生成,结束时间为开始时间依次增加180、360天。20人,每人50个场所,共1000行条件时间范围(每人的每个地点只有一行时间范围) 数据表中,开始时间为随机生成,结束时间为开始时间依次增加1-12个月。共50万行时间范围
批量删除整行,整体删除
采用《Excel·VBA指定条件删除整行整列》先Union行再删除的方法可大幅提高速度
Sub 时间范围筛选()
Dim dict As Object, rng As Range, arr, i&, k$
Set dict = CreateObject("scripting.dictionary"): tm = Timer
Application.ScreenUpdating = False '关闭屏幕更新,加快程序运行
arr = Worksheets("条件").[a1].CurrentRegion
For i = 2 To UBound(arr)
k = arr(i, 1) & "_" & arr(i, 2)
dict(k) = Array(CDbl(arr(i, 3)), CDbl(arr(i, 4)))
Next
Worksheets("数据").Copy after:=Sheets(Sheets.Count)
With ActiveSheet
.Name = "筛选结果": arr = .[a1].CurrentRegion: ReDim brr(1 To UBound(arr))
For i = 2 To UBound(arr)
k = arr(i, 1) & "_" & arr(i, 2)
If Not dict.Exists(k) Then '不存在的直接删除
If rng Is Nothing Then
Set rng = .Rows(i)
Else
Set rng = Union(rng, .Rows(i))
End If
Else
'符合条件时间范围
If Not (dict(k)(0) |