按月筛选,如果日期是一年前?

时间:2017-10-31 15:42:37

标签: excel vba excel-vba

我正在尝试制作一份报告,为在公司工作超过一年的人提供每月生日。我在弄清楚如何做逻辑来做我想做的事情时遇到了问题。我正在做的是让用户选择他们想要搜索的月份,然后它将过滤掉那个月,然后选择根据月份而不是确切日期在公司工作超过一年的人。所以,如果他们在两周内一年到这里,但仍然在十月,那么我想考虑他们在这里待一年给他们生日礼物。

我想过滤我的列表,以便我只列出在我选择的月份过生日的人,以及至少在这里待过一年的人。但这是问题,例如十月。现在我正在使用我当前的日期来决定是否已经过了一年。但我只想每个月运行一次。因此,如果他们在10月份过生日,并且如果他们在去年10月份被录用,那么即使技术上还没有一年,我也希望他们在我的名单上。因此,如果根据他们被聘用的月份来说这将是一年,那么我想考虑他们一年并将其纳入其中。

我试着用最好的方式解释一下,我想我会想到这个。这是我一直在研究的一些代码,但它没有做我想要的。它已经关闭,但是这会在您运行报告的那一天的确切日期。我需要它,所以如果你在这里待了一年,那么你可以留在名单上。

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

enter image description here

第一张表是10月份有生日的人的原始数据。第二个表是谁应该离开,例如实际日期是10月15日或10月的任何日期。如果他们在这里待了一年,10月份的每个人都应该获得生日卡。

任何帮助表示赞赏!我的大脑疼!...

2 个答案:

答案 0 :(得分:1)

使用您提供的示例数据,这样的内容对您有用:

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

答案 1 :(得分:0)

您可能需要考虑在E1和E2中添加一个日期,比如10/28/17,然后将其复制到适合的地方:

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

然后你应该能够在ColumnE上过滤以选择TRUE而不用再费心了,除了改变E1以适应。