【问题标题】:How to move to next month then next year in AutoFilter / Sort using VBA?自动过滤/排序 VBA
【发布时间】:2022-01-26 15:30:37
【问题描述】:

我有一个数据集,每个月都会从另一个电子表格中添加新数据。另一个电子表格。我录制了这个宏来做我想让它在这个月做的事情,但我不知道如何将时间向前推进。

正如您在下面的代码中看到的,我有条件“2022”和条件“3”,它们表示一个月。如何创建代码以知道下一次运行应该是“2022”和“4”等?该月的最大数字为 12,最终将变为“2023”和“1”。感谢您的帮助!

ActiveSheet.Range("$A$1:$AH$24811").AutoFilter Field:=11, Criteria1:="2022"
ActiveSheet.Range("$A$1:$AH$24811").AutoFilter Field:=12, Criteria1:="3"
ActiveSheet.Range("$A$1:$AH$24811").AutoFilter Field:=5, Criteria1:="=AP", _
    Operator:=xlOr, Criteria2:="=Charges"
ActiveSheet.Range("$A$1:$AH$24811").AutoFilter Field:=1, Criteria1:= _
    "=ST.2", Operator:=xlOr, Criteria2:="=ST.1"
ActiveCell.Offset(6504, 0).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(237, 0).Range("A1").Select

结束子

【问题讨论】:

  • 最后一行数据中的值是2022和3吗?
  • 技术上是的。对列进行排序后,新数据将从另一个工作表粘贴到最后一行。
  • 并且大概$A$1:$AH$24811 的范围也需要更改以包含粘贴的数据?
  • 它们是 A 到 AH 列吗?
  • 是的。新数据将粘贴在底部。文件不一样,这意味着列标题的顺序不同。操作:将“主要电子表格”排序到最近的会计年度和期间。为最新的会计年度、期间和类型对“新数据电子表格”进行排序。然后将新电子表格复制到主电子表格的相应列中。我想我可以将副本编码过去。我只是不知道如何做过滤器。感谢您的帮助和意见。

标签: excel vba


【解决方案1】:

这会使用最后一行数据中的值应用过滤器。

Option Explicit
Sub FilterData()

    Dim lastrow As Long, yr As Long, pd As Long
    
    With ActiveSheet
        lastrow = .Cells(.Rows.Count, 11).End(xlUp).Row
        yr = .Cells(lastrow, 11).Value2 ' col K
        pd = .Cells(lastrow, 12).Value2 ' col L
        With .Range("A1:AH" & lastrow)
            .AutoFilter Field:=11, Criteria1:=yr
            .AutoFilter Field:=12, Criteria1:=pd
            .AutoFilter Field:=5, Criteria1:="=AP", _
                Operator:=xlOr, Criteria2:="=Charges"
            .AutoFilter Field:=1, Criteria1:="=ST.2", _
                Operator:=xlOr, Criteria2:="=ST.1"
        End With
   End With
End Sub

【讨论】:

    【解决方案2】:

    当您运行宏时,它将获取当前月份和年份并将它们放入变量 vMonthvYear

    Sub runMacro()
        Dim vMonth As Long: vMonth = Month(Now())
        Dim vYear As Long: vYear = Year(Now())
        
        ActiveSheet.Range("$A$1:$AH$24811").AutoFilter Field:=11, Criteria1:=vYear
        ActiveSheet.Range("$A$1:$AH$24811").AutoFilter Field:=12, Criteria1:=vMonth
        ' ...
    End Sub
    

    【讨论】:

    • 但是,现在还不是 2022 年,也不是第 3 个月,对吧?所以 OP 可能使用的是财政月份和年份,而不是日历月份和年份。
    • @BigBen 你是对的。我正在关注从 9 月开始的 2022 财年。输入数据代表上个月的行动,因此 12 月收到的数据将反映 2022 年 11 月的活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 2021-03-29
    • 2017-04-12
    • 2013-05-17
    • 2022-01-23
    相关资源
    最近更新 更多