Excel - 按日期筛选表结果

时间:2017-09-22 20:10:31

标签: excel vba date

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

我想找到第一个日期范围(F1:F2)中的行,而不是第二个日期范围(H1:H2)。

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

我没有太多的VBA经验,所以这个问题让我感到沮丧。有什么想法吗?

由于

编辑:

我会尝试让问题更加清晰。

我有一个通过查询创建的表,该查询提取的数据介于开始日期和结束日期,2016年1月1日和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

1 个答案:

答案 0 :(得分:0)

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

创建一个附加列以保留结果值,如果是在日期范围之内或之外。然后

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可以做的事情。如果您使用代码过滤表,您可以对用户执行所有这些操作,为过滤条件创建一个额外的列,过滤,然后删除整个列。