VBA为本月后的过去一个月至2个月

时间:2016-04-20 21:52:27

标签: excel vba excel-vba date macros

我正在尝试更多地进入VBA,因为它允许更多的自由。我想弄清楚的是,如何使用VBA过滤列,仅显示仅在上个月,当前月和未来两个月出现的值。

我知道我可以使用xlFilterLastMonth但是现在我仍然只是记录宏,然后更改它们以满足我更具体的需求。我可以使用xlFilterNextMonth或xlFilterLastMonth找到奇异的过滤器。但我无法找到我正在寻找的东西。

这是我目前的宏:

{{1}}

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

假设我们有以下数据:

Dates
2/27/2016
5/28/2016
1/30/2016
5/3/2016
2/13/2016
4/29/2016
2/3/2016
7/5/2016
5/23/2016
3/11/2016
7/3/2016
2/5/2016
5/4/2016
6/20/2016
6/26/2016
7/14/2016
5/9/2016
1/26/2016
2/14/2016
3/9/2016
4/1/2016
2/18/2016
3/7/2016

A 栏中,我们希望在以下位置显示日期:

  • 上个月
  • 本月
  • 提前一个月
  • 提前两个月。

这些日期大于或等于2016年3月1日,如果今天是2016年4月20日,则小于或等于2016年6月30日。

考虑:

Sub Macro1()
    Dim d1 As Date, d2 As Date
    Dim cr1 As String, cr2 As String

    d1 = DateSerial(Year(Now), Month(Now) - 1, 1)
    d2 = DateSerial(Year(Now), Month(Now) + 3, 0)

    MsgBox d1 & vbCrLf & d2
    MsgBox CLng(d1) & vbCrLf & CLng(d2)

    cr1 = ">=" & CStr(CLng(d1))
    cr2 = "<=" & CStr(CLng(d2))

    ActiveSheet.Range("$A$1:$A$24").AutoFilter Field:=1, Criteria1:=cr1, _
            Operator:=xlAnd, Criteria2:=cr2
End Sub

结果:

enter image description here
警告

如果今天是1月或12月,您必须进一步测试以确定它是否有效。也就是说,代码可以预见到明年还是回到上一年。