从当前日期过滤7个日期(中间缺少日期)

时间:2018-01-25 07:27:04

标签: excel vba excel-vba

我是VBA的初学者,我需要编写一个列,我必须在当前日期的7天内取消勾选。我一直在使用用户LR42的代码

anonymous user

我确实从我的数据中取消了7天。但是,问题有时候,数据看起来像这样:

200

今天的日期是1月24日。当前日期 - 7天是1月18日。我希望代码在7天内(包括当前日期)取消勾选,同时考虑到这些日期内可能缺少日期的事实。如果我要手动取消勾选它,我会在1月16日之前取消勾选。但是,根据上面的数据,代码只会在1月18日之前取消勾选(同时跳过那里的事实并不是1月份23和21)。

我应该如何对代码进行编码,以致代码还会考虑这7天内可能缺少日期的事实?

1 个答案:

答案 0 :(得分:0)

我正在努力针对美国日期格式对此进行测试,但请尝试以下设置。假设您的数据被设置为名为Table1的Excel表,并且它有一个名为Date的列(在A列中),正在进行排序,并且日期不会重复。

注意: Ctrl + T ,在数据范围的填充单元格中,将数据范围转换为Excel中的表格

Option Explicit

Sub FilterData()

    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet1")

    Dim sourceTable As ListObject

    Set sourceTable = ws.ListObjects("Table1")

    Dim cutOffDate As Date
    cutOffDate = CDate(ws.Range("A" & Split(Split(sourceTable.DataBodyRange.Address, ":")(1), "$")(2)).Offset(-7, 0).Value2)

    With sourceTable.Sort
        .SortFields.Clear
        .SortFields.Add _
        Key:=Range("Table1[[#All],[Date]]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    sourceTable.Range.AutoFilter Field:=1, Criteria1:="<" & cutOffDate, Operator:=xlAnd

End Sub

示例数据如表:

Data set up for example

对于非美国日期格式区域设置:如果您遇到不同日期格式(即非US格式)的问题导致过滤器功能不正确,您可以尝试@Ron Rosenfeld的建议,基本上将变量作为Long传递或双倍以避免内部转换:

e.g。

Dim cutOffDate As Long
cutOffDate = ws.Range("A" & Split(Split(sourceTable.DataBodyRange.Address, ":")(1), "$")(2)).Offset(-7, 0).Value2