Excel 使用AutoFitler(VBA)根据条件筛选月份
所以从理论上讲,这个按月份过滤日期的概念应该是可行的,但事实并非如此。我使用一个表格记录完成的每个作业,然后用标准格式记录日期。我不明白为什么这段代码不能计算表单中的日期。表格中的每个月的格式始终为x/xx/xxxx(单位数月份),xx/xx/xxxx(单位数月份)和xx/xx/xxxx(单位数月份)。在我看来,根据我的需要,找到一个以每个月的字符开始,然后计数的单元格应该是一个足够简单的概念。问题是,当它基于此筛选器对行进行计数时,返回0。有人知道发生了什么事吗 谢谢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
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
谢谢,我想这可能就是答案。我已经在使用带有列的临时选项卡对我的信息进行排序。我甚至没有想到月函数!不幸的是,我要到星期一回到办公室后才能尝试。我会让你不断更新!我能够在我的家用电脑上测试一个更简单的版本,它完全可以工作!你是救命恩人,谢谢。多么简单的修复!谢谢,我想这可能就是答案。我已经在使用带有列的临时选项卡对我的信息进行排序。我甚至没有想到月函数!不幸的是,我要到星期一回到办公室后才能尝试。我会让你不断更新!我能够在我的家用电脑上测试一个更简单的版本,它完全可以工作!你是救命恩人,谢谢。多么简单的修复!