【问题标题】:Filtering Months with Criteria using AutoFitler (VBA)使用 AutoFitler (VBA) 过滤带有标准的月份
【发布时间】:2016-08-07 21:15:05
【问题描述】:

所以理论上,这个按月份过滤日期的概念应该有效,但事实并非如此。我正在使用一个表格来记录每个完成的任务,然后用标准格式对它们进行日期。我很困惑为什么这段代码不能以这种形式计算日期。表格中的每个月将始终格式化为 x/xx/xxxx 用于一位数月份,以及 xx/xx/xxxx 用于两位数月份。在我看来,找到一个以每个月的字符开头的单元格然后计算它们,应该是一个足够简单的概念来满足我的需求。问题是,当它根据这个过滤器计算行数时,它返回 0。有谁知道发生了什么?

谢谢!

 With iTable
        .AutoFilter
        .AutoFilter Field:=1, Criteria1:=tin
        .AutoFilter Field:=3, Criteria1:="=1/*"
        End With
        TData.Cells(i, 4).Value = iTable.Resize(, 1).SpecialCells(xlCellTypeVisible).Count - 1


        With iTable
        .AutoFilter
        .AutoFilter Field:=1, Criteria1:=tin
        .AutoFilter Field:=3, Criteria1:="=2/*"
        End With
        TData.Cells(i, 5).Value = iTable.Resize(, 1).SpecialCells(xlCellTypeVisible).Count - 1

【问题讨论】:

    标签: excel vba date criteria autofilter


    【解决方案1】:

    要获得每月的准确计数,您可以使用右侧未使用的列作为“帮助”列,并带有MONTH function。此“帮助”列在其用作Range.AutoFilter Method 的标准后可以删除。

    您还可以在 C 列中的日期上快速编写 Conditional Formatting,并将 Operator:=xlFilterCellColor 选项应用于 C 列的 .Autofilter。

    Option Explicit
    
    Sub Macro2()
        Dim m As Long, n As Long, tin As String, vMNTHs As Variant
    
        vMNTHs = Array(1, 2)
        tin = "tin"
    
        With Worksheets("sheet3")
            If .AutoFilterMode Then .AutoFilterMode = False
            With .Cells(1, 1).CurrentRegion
                For m = LBound(vMNTHs) To UBound(vMNTHs)
                    If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
                    With .Resize(.Rows.Count - 1, 1).Offset(1, 2)
                        .FormatConditions.Add Type:=xlExpression, Formula1:="=MONTH(C2)=" & vMNTHs(m)
                        .FormatConditions(.FormatConditions.Count).SetFirstPriority
                        .FormatConditions(1).Interior.Color = vbRed
                        .FormatConditions(1).StopIfTrue = True
                    End With
    
                    .AutoFilter Field:=1, Criteria1:=tin, Operator:=xlFilterValues
                    .AutoFilter Field:=3, Criteria1:=vbRed, Operator:=xlFilterCellColor
    
                    n = Application.Subtotal(102, Columns(3))
                    MsgBox "the count for " & Format(DateSerial(2016, vMNTHs(m), 1), "mmmm") & " is " & n
    
                    With .Resize(.Rows.Count - 1, 1).Offset(1, 2)
                        .FormatConditions(1).Delete
                    End With
                Next m
            End With
            If .AutoFilterMode Then .AutoFilterMode = False
        End With
    End Sub
    

    【讨论】:

    • 谢谢,我想这可能是答案。我已经在使用带有列的临时选项卡来对我的信息进行排序。我什至没有想到 MONTH 功能!不幸的是,我要等到星期一回到办公室时才能尝试这个。我会及时通知你!
    • 我能够在我的家用电脑上测试一个更简单的版本,它完全可以工作!你是救生员,谢谢。多么简单的解决方法!
    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多