如何筛选出所有超过3个月的日期(参考当前日期)

时间:2019-08-28 12:13:05

标签: excel vba

我想过滤3个月以上的日期,并且我想要系统变量

Dim Date3M_ago As Date
Date3M_ago = Worksheets("Engine").Range("C1")
Selection.AutoFilter
ActiveSheet.Range("A:C").AutoFilter Field:=46, Operator:= _
xlFilterValues, Criteria1:= Date3M_ago

'Worksheets("Engine").Range("C1")是单元格,在该单元格中,我有公式向我显示3个月前的日期,并引用了当前日期

问题是我无法写criteria1:= < Date3M_ago,因为它给了我错误。正确的语法为criteria1:= "< 8/28/2019",但这是一个固定的日期,我不需要。

3 个答案:

答案 0 :(得分:1)

自动过滤器无法应用于您尝试自动过滤的范围之外的列。在您的示例中,您尝试过滤AT列(Field:=46),但仅应用从A列到C列的范围。将AT列应用于自动过滤器,如下所示:

ActiveSheet.Range("A:AT").AutoFilter Field:=46, Operator:= _

或将您的字段更改为包含在范围内的字段:

ActiveSheet.Range("A:C").AutoFilter Field:=3, Operator:= _

还有一个建议,用vba计算代替对30天前填充您的日期的单元格的引用,以防止破坏:

Date3M_ago = DateAdd("m", -3, Now)

答案 1 :(得分:0)

您可以尝试以下操作:

Dim Date3M_ago As Date

Date3M_ago = Worksheets("Engine").Range("C1")

ActiveSheet.UsedRange.AutoFilter Field:=46, Criteria1:="<" & Date3M_ago, Operator:=xlAnd

答案 2 :(得分:0)

希望这里的内容对您有用:

您说您需要过滤掉比今天早三个月的日期(这就是您在Worksheets("Engine").Range("C1")中的公式所做的。同样可以通过VBA使用Application.WorksheetFunction.EDate(Date, -3)甚至是{{ 1}}(按照@Plutian的回答)。如果这不是您的意图,则可以在该位置再次引用您自己的变量,但请确保将其转换为一个双精度值以在过滤器中使用> {{1} }。

  • 我们为什么要将其变成双倍?根据您的Windows区域设置,使用日期作为条件可能会给您带来意想不到的结果。 This is because Excel sees the dates as a US date。解决这个问题的一种方法是,使用链接,使用Long变量,但是使用Double变量将可以使用小数,因此,在我的选择中使用DateAdd可以节省日期时间值。

如果我们将上述内容与以下示例数据一起使用(日期格式为“ d-m-yyyy”:

enter image description here

要在C列上过滤的一段代码如下:

CDbl(Date3M_ago)

请注意要过滤的字段如何在要过滤的范围内,例如:第三列?输出如下:

enter image description here