VBA:在工作表上双重过滤,如何在两个特定间隔之间过滤掉数据

时间:2017-03-19 12:46:05

标签: excel vba excel-vba

我需要VBA代码来过滤某个时间窗口的警报日志。警报出现并清除某些对象。我需要脚本在两个指定时间之间过滤掉警报(例如在凌晨1点之后出现并且在凌晨3点之前清除的那些警报),并将过滤后的数据复制到另一张表格。请参阅附图。

查看给定的图片,其中显示了所有警报日志。 enter image description here

1 个答案:

答案 0 :(得分:1)

我不得不稍微修改您的数据,因为没有提升和清算时间符合您的标准。

Option Explicit

Sub betweenTimes()
    With Worksheets("Sheet5")
        If .AutoFilterMode Then .AutoFilterMode = False
        With .Range(.Cells(2, "A"), .Cells(.Rows.Count, "G").End(xlUp))
            'as hardcoded values
            '.AutoFilter field:=2, Criteria1:=">=" & Format(Date + TimeSerial(1, 0, 0), "yyyy-mm-dd hh:mm:ss")
            '.AutoFilter field:=3, Criteria1:="<=" & Format(Date + TimeSerial(3, 0, 0), "yyyy-mm-dd hh:mm:ss")
            'as values from I3:J3
            .AutoFilter field:=2, Criteria1:=Format(.Parent.Cells(3, "I").Value2, "\>\=yyyy-mm-dd hh:mm:ss")
            .AutoFilter field:=3, Criteria1:=Format(.Parent.Cells(3, "J").Value2, "\<\=yyyy-mm-dd hh:mm:ss")
            With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
                If CBool(Application.Subtotal(103, .Cells)) Then
                    Union(.Cells, .Cells(1, "XFD")).Copy Destination:=Worksheets("Sheet6").Cells(2, "A")
                End If
            End With
        End With
        If .AutoFilterMode Then .AutoFilterMode = False
    End With
End Sub

enter image description here