【问题标题】:EXCEL VBA find max date and filter x days before max dateEXCEL VBA查找最大日期并过滤最大日期前x天
【发布时间】:2019-03-21 04:37:33
【问题描述】:

我在 A 列中有日期的 Excel 工作表,我需要找到最晚日期并在该最晚日期之前的最后 7 天进行过滤。 我只在网上找到需要今天日期的 vba 代码 - 7 天,但我不能使用它,因为这些日期来自去年。

请,谢谢!

编辑:

感谢您的建议。 我试图把它放在我的 vba 代码中,但它过滤了 0 个结果。

Sub Filter()
    Dim maxDate As Date
    maxDate = WorksheetFunction.Max(ActiveSheet.Range("A:A"))
    ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:= _
        ">" & maxDate - 6
End Sub

由于此 VBA 宏文件管理器的日期为 dd.mm.yyyy,因此无法正常工作。 (注意最后的点),在我的情况下为 0,它应该按 dd.mm.yyyy 过滤(不带点)。我不知道如何过滤没有点

EDIT2:这对我有用。

Sub Largest()
    Dim rng As Range
    Dim dblMax As Double
    Set rng = ActiveSheet.Range("A:A")
    dblMax = Application.WorksheetFunction.Max(rng)
    ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:= _
            ">" & dblMax - 7, Operator:=xlAnd
End Sub

【问题讨论】:

  • 仅供参考 - 如果您在 A1 中有 5/30/2018,您可以在 B1 中输入 =A1-5 以获取 5/25/2018
  • 是的,使用 Excel VBA 自动筛选可能会很棘手。有些人发现循环遍历要过滤的数组更容易。有时我发现可以使用日期的数值,就像您在将日期强制为 Double 时所做的那样
  • 与其说“这对我有用”,为什么不发布你自己对这个问题的回答,这样这是对其他人的完整问答?

标签: excel vba date filter


【解决方案1】:

要在 VBA 中获取 Range 中的最大值(并且列 is 是 Range),请使用 worksheetFunction.Max,例如

Dim maxDate as Date
maxDate = worksheetFunction.Max(ActiveSheet.Range("A:A"))

注意选择数据一致的范围,不要混淆日期和数字。

从那里,您可以简单地从日期中减去 7(或使用 DateAdd(d, -7, maxDate) 并继续使用您已经找到的代码。

编辑:要将日期用作过滤器值,请将maxDate 的数据类型更改为 Double。您可以通过手动设置过滤器并在 立即窗口 (Ctrl+G) 中输入以下语句来检查这一点:

? ActiveSheet.AutoFilter.Filters(1).Criteria1

这会导致(您的值会有所不同)>43329。背景是 Excel/VBA 将日期存储为Double

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-28
    • 2021-11-23
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多