我正在尝试制作一份报告,为在公司工作超过一年的人提供每月生日。我在弄清楚如何做逻辑来做我想做的事情时遇到了问题。我正在做的是让用户选择他们想要搜索的月份,然后它将过滤掉那个月,然后选择根据月份而不是确切日期在公司工作超过一年的人。所以,如果他们在两周内一年到这里,但仍然在十月,那么我想考虑他们在这里待一年给他们生日礼物。
我想过滤我的列表,以便我只列出在我选择的月份过生日的人,以及至少在这里待过一年的人。但这是问题,例如十月。现在我正在使用我当前的日期来决定是否已经过了一年。但我只想每个月运行一次。因此,如果他们在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
第一张表是10月份有生日的人的原始数据。第二个表是谁应该离开,例如实际日期是10月15日或10月的任何日期。如果他们在这里待了一年,10月份的每个人都应该获得生日卡。
任何帮助表示赞赏!我的大脑疼!...
答案 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以适应。