只在下个月过滤

时间:2017-02-13 06:52:41

标签: excel vba excel-vba

我正在开发一个包含所有月份数据的Excel。如果我必须在我当前工作月之后的几个月过滤。然后如何编写相同的编码。

对于Eg。现在我正在工作2月17日。我想过滤截至2017年2月。从2017年2月开始排除所有未来几个月

我的代码

ActiveSheet.Range("$A$:$AA" & LastRow2).AutoFilter FIELD:=18, Criteria1:=">=01/01/2006",Criteria2:="<=28/02/2017"

2 个答案:

答案 0 :(得分:0)

对于criteria2,您可以通过DATE()函数获取今天的日期将其转换为字符串使用mid()以仅获取月份和年份值...根据月份值编写if函数以获取最后一个日期值....添加一个函数来检查年份的飞跃并将日期值添加到2月

 Month_1=datepart("m",date())
 year_1=datepart("yyyy",date())
 if month in (01,03,05,07,08,10,12) then
 last_day=31
 elseif month <> 02 then
 last_day=30
 else
 isLeapYear = (Month(DateSerial(Yr, 2, 29)) = 2)
 if isLeapYear = True then
 last_day=29
 else
 last_day=28
 end if
 end if
 criteria_2=cdate(last_day & "/" & Month_1 & "/" & year_1)

将此变量添加为过滤器中的条件2 ....您将始终使用此代码获取当月的最后一天。

我还没有测试过代码。如果它有错误,请原谅我。

答案 1 :(得分:0)

您可以尝试使用WorksheetFunction.EoMonth来获取当月(或任何其他日期)的最后一天。

另外,请尝试远离ActiveSheet并使用完全限定的对象。

注意:通过我的测试,我发现如果我使用Criteria2:="<=" & Cdbl(toDate)就行了。当我尝试没有Cdbl时,它没有(由于我的单元格的日期格式),在你的情况下你可能不需要它。

代码示例

Option Explicit

Sub FilterNextTwoMonths()

Dim toDate As Date

' get the last date of the current month
toDate = WorksheetFunction.EoMonth(Date, 0)

With Worksheets("Sheet1") '<-- replace "Sheet1" with your sheet's name
    .Range("$A$:$AA" & LastRow2).AutoFilter Field:=18, Criteria1:=">=01/01/2006", Operator:=xlAnd, Criteria2:="<=" & CDbl(toDate)       
End With

End Sub