我正在开发一个包含所有月份数据的Excel。如果我必须在我当前工作月之后的几个月过滤。然后如何编写相同的编码。
对于Eg。现在我正在工作2月17日。我想过滤截至2017年2月。从2017年2月开始排除所有未来几个月
我的代码
ActiveSheet.Range("$A$:$AA" & LastRow2).AutoFilter FIELD:=18, Criteria1:=">=01/01/2006",Criteria2:="<=28/02/2017"
答案 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