Excel·VBA时间范围筛选及批量删除整行

您所在的位置:网站首页 excel怎么筛选日期范围 Excel·VBA时间范围筛选及批量删除整行

Excel·VBA时间范围筛选及批量删除整行

2024-07-09 07:37| 来源: 网络整理| 查看: 265

看到一个帖子《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)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3