【问题标题】:Excel - filter table results by datesExcel - 按日期过滤表格结果
【发布时间】:2017-09-22 20:10:31
【问题描述】:

我在 excel 中有一个可刷新的表格,我想按几个日期范围过滤行。每行都有一个日期和其他信息。

我想查找在第一个日期范围 (F1:F2) 中且不在第二个日期范围 (H1:H2) 中的行。

表格是可刷新的,并且可以改变大小。它目前跨越 A3:X6146。该表是一个查询,因此当使用单独的日期范围来查找表值时,它将改变大小。

我没有太多 VBA 经验,所以这个问题让我很头疼。有什么想法吗?

谢谢

编辑:

我会尽量让问题更清楚。

我有一个通过查询创建的表,该表在此处提取开始日期和结束日期之间的数据,即 2016 年 1 月 1 日和 2017 年 12 月 31 日。它会列出每次购买物品的时间,因此每个物品都可以列出多次。

我想查找在有效日期范围的开始日期和结束日期(单元格 F1 和 F2)之间购买(在表格中列出)的商品,以及在无效日期范围(单元格 H1 和 H2)之间未购买的商品。

Starting Date: 1/1/2016    Active Date Range Start: 3/1/2016    Inactive Date Start: 3/2/2017

Ending Date: 12/31/2017    Active Date Range End: 3/1/2017      Inactive Date End: 9/22/2017




item    date
1      9/21/2017
2      9/20/2017
3      9/20/2017

【问题讨论】:

  • 添加一个带有MATCH 公式的列,该公式在 H 列中找到 F 的值,过滤 NA。那里不需要任何 VBA。

标签: excel vba date


【解决方案1】:

是的,我可以告诉你我会做什么。

创建一个额外的列以保留结果值,如果在日期范围内或之外。那么

dim t() as string, lin as long, linf as long
linf=Range("F65536").End(xlUp).Row  'or any other more precise way to get the final line
redim t(1 to linf-2,1 to 1)

'range dates - are they on the worksheet?
dim rg_dates as Range,r as range,b as boolean
set rg_dates=Sheets("xxxx").Range("B1:B4") ' just an example, the range would be B1:C4 but use only the first column - see below

    For lin=3 to linf
        b=False
       For each r in rg_dates
          If cells(lin,"F").value>= r.Cells(1,1) and cells(lin,"G").Value<=r.Cells(1,2).value then
             b=true
             Exit for
          End If
      Next r
      If b then t(lin-2,1)="Y" else t(lin-2,1)="N"

    Next l
   Range("Z3:Z" & linf).Value = T

'然后只过滤表格。

为了保持它没有错误,以及如何在具体情况下应用它,需要做很多事情。希望通过我上面写的内容,您可以了解使用 VBA 可以做的事情。如果您使用代码过滤表,您可以对用户执行所有这些不可见的操作,为过滤条件创建一个额外的列,过滤,然后删除整个列..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2012-11-23
    相关资源
    最近更新 更多