按月过滤,如果某个date是一年前?

我正在试图提出一个报告,指出在公司工作一年以上的人每个月的生日。 我正在研究如何做逻辑来做我想做的事情。 我正在做的是让用户select一个月他们想要search,然后它会过滤出那个月,然后select在公司的时间超过一年的人不是那个确切的一天。 所以,如果他们在这里待了两年,而现在还是在十月,那么我想在这里考虑一年,他们会给他们一个生日礼物。

我想筛选我的名单,以便我只有一个在我select的月份里有生日的人的名单,以及至less在这里待过一年的人。 但是,这是问题,例如十月。 现在我正在使用我的当前date来决定是否是一年。 但是我只想每月运行一次。 所以如果他们在十月份有生日,而且如果他们在去年十月被雇用,那么即使在技术上不是一年,我也希望他们在我的名单上。 所以如果按照他们聘用的月份计算,那么我想考虑他们一年,然后把他们包括在内。

我试图解释,我想我可以做的最好的,我想这个想法。 这里是我一直在努力的一些代码,但它没有做我想要的。 这是closures的,但是这是在你运行报告的那一天的确切date。 我需要它,所以如果你在这一个月里来过一年,那么你可以留在榜单上。

With wb.Sheets(2) For lngRow = lngRows To 2 Step -1 If Date - Range("F" & lngRow) < 365 Then wb.Sheets(2).Rows(lngRow).EntireRow.Delete End If Next End With 

在这里输入图像说明

第一张表是10月份有生日的人的原始数据。 第二张表是如果实际date是10月15日或10月份的任何date,应该留下谁。 如果他们在这里呆了一年,十月份的每个人都应该拿到一张生日卡。

任何帮助表示赞赏! 我的脑袋疼…

使用您提供的样本数据,这样的事情应该适合您:

 Sub tgr() Dim ws As Worksheet Dim TargetDate As Date Set ws = ActiveWorkbook.Sheets(2) TargetDate = DateSerial(Year(Now()) - 1, Month(Now()) + 1, 1) With ws.Range("A1:D" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row) .AutoFilter .AutoFilter 2, "<" & TargetDate .AutoFilter 3, "=" & Month(Now()) End With End Sub 

你可能想考虑在E1和E2中写一个date,比如说10/28/17 ,然后复制下来以适应:

 =AND(B2<EOMONTH(E$1,-13),C2=MONTH(E$1)) 

那么你应该能够在ColumnE上过滤selectTRUE而不用再费神了,除了改变E1来适应。