前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA代码应用示例:基于时间筛选数据

VBA代码应用示例:基于时间筛选数据

作者头像
fanjy
发布2022-11-16 13:04:34
1.2K0
发布2022-11-16 13:04:34
举报
文章被收录于专栏:完美Excel

标签:VBA

在筛选数据时,通常是筛选满足特定条件或者介于两个条件之间的信息,例如基于多个条件的筛选或者筛选两个日期之间的数据。然而,总是会遇到一些特殊情形,例如,单元格中包含有日期和时间,如果单元格中的时间大于指定的时间,就获取该单元格所在行的数据。这就是本文要解决的问题。

这里使用VBA代码,但使用了辅助列。也就是说,代码生成一个辅助列,来判断其对应的单元格中的时间是否大于指定时间,如果是则在辅助列单元格中输入1,否则为0。然后,基于该列应用筛选,将筛选出的数据复制到指定位置。最后,删除该辅助列并恢复成原始数据。

如果指定时间为18时,将判断含有日期和时间的单元格(在列D)中的时间是否大于18时的公式如下:

=IF(HOUR(D2)>=18,1,0)

在VBA中,将公式放置在引号中:“=IF(HOUR(D2)>=18,1,0)”,确保以文本形式读入单元格。这个公式动态地放置到第2行至最后一个数据行中。

完整的代码如下:

代码语言:javascript
复制
Sub FilterHelperCol()
    Dim lr As Long
    Dim rng As Range
    Dim sh As Worksheet
    Set sh = Sheet1
    lr = sh.Range("A" & sh.Rows.Count).End(xlUp).Row
    Set rng = sh.Range("A1:L" & lr)
    rng.Offset(1, rng.Columns.Count).Resize(lr - 1, 1) = "=IF(HOUR(D2)>=18,1,0)"
    rng.Offset(, rng.Columns.Count).Resize(lr - 1, 1).AutoFilter 1, 1
    rng.Copy Sheet2.[A10]
    rng.AutoFilter
    rng.Offset(1, rng.Columns.Count).Resize(lr - 1, 1).ClearContents
End Sub

本文学习整理自thesmallman.com,你可以到该网站下载示例文件,也可以到知识星球App完美Excel社群下载示例文件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档