我正在尝试过滤数据,其中一个过滤条件 - 月 - 需要由用户在工作簿中的一个工作表中的单元格中输入。
如果数据输入到代码中,它可以正常工作,如下所示:
ActiveSheet.Range("$A$2:$P$2173").AutoFilter Field:=13, Criteria1:=Array( _
"="), Operator:=xlFilterValues, Criteria2:=Array(1, "10/1/2013")
ActiveSheet.Range("$A$2:$P$2173").AutoFilter Field:=12, Criteria1:="<>"
ActiveSheet.Range("$A$2:$P$2173").AutoFilter Field:=3, Criteria1:="<>"
要过滤的列的日期显示为MM-YYYY
,但在公式栏中显示为DD-MM-YYYY
。我无法使用链接到另一个工作表的变量,单元格引用或命名范围替换日期10/1/2013
。
因此,要过滤的数据位于Sheet1
,月份将输入Sheet2
中的单元格。
有人可以帮忙吗?
答案 0 :(得分:0)
我不使用VBA来过滤我的表,但是按照你的例子,我相信你必须先:
A)。调整代码以在过滤时使用2个标准。因此,您应该捕获1日到31日之间的日期。 你的第一个标准接缝混合。
ActiveSheet.Range("$A$2:$P$2173").AutoFilter Field:=13, Criteria1:="<1/10/2013" _
, Operator:=xlAnd, Criteria2:=">30-10-2013"
B)。使用mm-yyyy输入并构建定义时间范围的2个值。通过添加1和31来创建有效日期。然后声明变量:
MyMonth = Sheets("Sheet2").Range("A1").Value 'Change A1 to the cell used to store the month
MyYear = Sheets("Sheet2").Range("A2").Value 'Change A2 to the cell used to store the year
Month_1st = DateSerial(MyYear, MyMonth , 1)
Month_31st = DateSerial(MyYear, MyMonth , 31) 'fine-tuning needed to sort the months ending 30th
' use these in the code above like this:
Criteria1 = "<" & Month_1st
Criteria2 = ">" & Month_31st
ActiveSheet.Range("$A$2:$P$2173").AutoFilter Field:=13, Criteria1:=Criteria1 _
, Operator:=xlAnd, Criteria2:=Criteria2
没有测试过这一切,但我认为它应该有效。如果给定的代码不可用,我可能会推荐另一种方法。干杯!