Excel 使用AutoFitler(VBA)根据条件筛选月份

Excel 使用AutoFitler(VBA)根据条件筛选月份,excel,vba,date,criteria,autofilter,Excel,Vba,Date,Criteria,Autofilter,所以从理论上讲,这个按月份过滤日期的概念应该是可行的,但事实并非如此。我使用一个表格记录完成的每个作业,然后用标准格式记录日期。我不明白为什么这段代码不能计算表单中的日期。表格中的每个月的格式始终为x/xx/xxxx(单位数月份),xx/xx/xxxx(单位数月份)和xx/xx/xxxx(单位数月份)。在我看来,根据我的需要,找到一个以每个月的字符开始,然后计数的单元格应该是一个足够简单的概念。问题是,当它基于此筛选器对行进行计数时,返回0。有人知道发生了什么事吗 谢谢 With iTable

所以从理论上讲,这个按月份过滤日期的概念应该是可行的,但事实并非如此。我使用一个表格记录完成的每个作业,然后用标准格式记录日期。我不明白为什么这段代码不能计算表单中的日期。表格中的每个月的格式始终为x/xx/xxxx(单位数月份),xx/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

要获得每月的准确计数,您可以使用右侧未使用的列作为具有的“helper”列。此“帮助者”列在用作标准后可以删除

您还可以在C列中快速填写日期,并将
运算符:=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

要获得每月的准确计数,您可以使用右侧未使用的列作为具有的“helper”列。此“帮助者”列在用作标准后可以删除

您还可以在C列中快速填写日期,并将
运算符:=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

谢谢,我想这可能就是答案。我已经在使用带有列的临时选项卡对我的信息进行排序。我甚至没有想到月函数!不幸的是,我要到星期一回到办公室后才能尝试。我会让你不断更新!我能够在我的家用电脑上测试一个更简单的版本,它完全可以工作!你是救命恩人,谢谢。多么简单的修复!谢谢,我想这可能就是答案。我已经在使用带有列的临时选项卡对我的信息进行排序。我甚至没有想到月函数!不幸的是,我要到星期一回到办公室后才能尝试。我会让你不断更新!我能够在我的家用电脑上测试一个更简单的版本,它完全可以工作!你是救命恩人,谢谢。多么简单的修复!