在Excel中过滤VBA并且有没有办法更好地优化它?

时间:2015-04-02 11:27:30

标签: excel excel-vba vba

我有下面的代码,我从录制一个宏,但我发现它有点慢或者可能是它应该不确定的方式。我在某地读到,记录宏的方式可能不是最有效的方式,因此我的问题的原因

Sub CareFilter()

Sheets("Main").Select
On Error Resume Next
ActiveSheet.ShowAllData
    ActiveSheet.Range("$A$1:$AX$10000").AutoFilter Field:=23, Criteria1:=Array( _
    "LATE", "LATP/F", "PAY-"), Operator:=xlFilterValues
ActiveSheet.Range("$M$1:$M$10000").AutoFilter Field:=13, Criteria1:=Array( _
    "ATHRLE", "ATOCEE", "ATOCSE", "ATWCBC", "ATWCBE", "ATWCSE", "BLBSGE", "BLWCCE", _
    "BRBESE", "BRBSAB", "BRBSAE", "BRBSGE", "BRBWRE", "BRCBSE", "BRCCBE", "BRCCCE", _
    "BRCIS1", "BRCISE", "BROCSE", "BRSCBE", "BRWBSE", "BRWCBE", "BUBSGE", "BUOCBX", _
    "BUOCSE", "BUWCBE", "BUWCSE", "HMCCBE", "KTCCBE", "KTCCOE", "KTCTCE", "KTMCCE", _
    "KTOCE2", "KTOCE3", "KTOCEE", "KTPRSE", "KTRMTE", "KTSDCE", "KTSOOE", "KTWCSE", _
    "MNATCE", "MNATRE", "MNCCOE", "MNHRLE", "MNMCCE", "MNPSSE", "MTBESB", "MTBSAB", _
    "MTBSGB", "MTBSMB", "MTCBSB", "MTCHDB", "MTCTCB", "MTOCEB", "MTSCBB", "MTWBEB", _
    "MTWBLB", "MTWBSB", "MTWCBB", "MTWCCB", "MTWCSB", "OTCIS1", "OTCISE", "OTOCSE", _
    "OTSCBE", "OTSCSB", "OTWCBE", "PKCCBE", "PKCHDE", "PKHRLE", "PKLCBE", "PKLWBE", _
    "PKOCSE", "PKPRIE", "PKPRSE", "PKSCBE", "PKWCBE", "PKWCSE", "YMBSAB", "YMBSAE", _
    "YMBWRE"), Operator:=xlFilterValues
ActiveSheet.Range("$A$1:$AW$10000").AutoFilter Field:=21, Criteria1:="<>"
ActiveSheet.Range("$A$1:$AW$10000").AutoFilter Field:=22, Criteria1:=Array( _
    "AWOL", "LATE", "LATF", "LATP", "OVAB", "PAY-"), Operator:=xlFilterValues
ActiveSheet.Range("$A$1:$BD$10000").AutoFilter Field:=21, Criteria1:=">" & 1 / 10 ^ 10
Range("A1").Select
End Sub

宏完全按照我的需要做,只是希望可能有更快的方法来实现相同的结果。我确实有一些这些宏正在做不同的事情。

任何帮助将不胜感激,并提前感谢。

1 个答案:

答案 0 :(得分:1)

如果过滤器将始终过滤同一组值,则将它们放在单独工作表的列表中。 (我喜欢名字Lookups) 在工作表中添加要筛选的列,并添加“匹配”功能以在“查找”选项卡上查找相同的值。匹配将返回它找到匹配值的行号或指示不匹配的#N / A.将匹配函数包装在if语句中以返回true / false,(或0,1)并将列命名为QuickFilter。扩展自动过滤以包含新列,然后选择True作为选择。让它在最艰难的列上进行过滤后,重复其他列的过程。

匹配功能如下所示:

=if(isna(Match('Lookups'!A1,"$M$1:$M$10000",0),"",True))

由于您正在进行多个列组合,因此可以分别使用0,1表示false,然后为其他搜索条件添加类似的公式。

因此,如果条件列1匹配,那么公式将是1 PLUS,如果条件列2匹配则1 ....仅筛选加起来为5的值。

这是基于所有公式,但可以自动化,以便在测试公式后自动填充列。

如果这有意义并且您需要其他帮助,请回复。