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