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

2022-11-16 13:04:34 浏览数 (1)

标签: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社群下载示例文件。

vba

0 人点赞