許多Excel功能都可以使用VBA來實(shí)現(xiàn),自動(dòng)篩選就是其中之一,對應(yīng)著VBA的Autofilter方法。在功能區(qū)“數(shù)據(jù)”選項(xiàng)卡“排序和篩選”組中,單擊“篩選”按鈕(如下圖1所示)就可以執(zhí)行自動(dòng)篩選,這也是我們使用條件篩選數(shù)據(jù)集的常見操作。
圖1如果只需要篩選數(shù)據(jù)并執(zhí)行一些基本操作,建議直接使用Excel工作界面提供的內(nèi)置篩選功能。而當(dāng)希望將篩選數(shù)據(jù)作為自動(dòng)化的一部分時(shí),應(yīng)使用VBA的Autofilter方法。例如,假設(shè)希望基于下拉選擇快速篩選數(shù)據(jù),然后將篩選的數(shù)據(jù)復(fù)制到新工作表中。雖然這可以使用內(nèi)置篩選功能和一些復(fù)制粘貼來完成,但手動(dòng)完成這項(xiàng)工作可能需要花費(fèi)大量時(shí)間。在這種情況下,使用VBA自動(dòng)篩選可以加快速度并節(jié)省時(shí)間。Autofilter方法語法Autofilter方法的語法如下:表達(dá)式.AutoFilter(Field,Criteria1,Operator,Criteria2,VisibleDropDown)其中:表達(dá)式:想要應(yīng)用自動(dòng)篩選的單元格區(qū)域。Field:可選參數(shù),這是要篩選的列號(hào),從數(shù)據(jù)集的左側(cè)開始計(jì)算。因此,如果要根據(jù)第二列篩選數(shù)據(jù),則該值應(yīng)為2。Criteria1:可選參數(shù),這是篩選數(shù)據(jù)集所基于的條件。Operator:可選參數(shù),如果也使用Criteria2,則可以基于Operator(運(yùn)算符)組合這兩個(gè)條件。以下運(yùn)算符可供使用:xlAnd、xlOr、xlBottom10Items、xlTop10Items、xlBottom10Percent、xlTop10Percent、xlFilterCellColor、xlFilterDynamic、XlFilterFontColor、XlFilterIcon、XlFilterValues。Criterial2:可選參數(shù),這是篩選數(shù)據(jù)集所基于的第二個(gè)條件。VisibleDropDown:可選參數(shù),可以指定是否希望篩選下拉箭頭圖標(biāo)顯示在篩選列中??扇RUE或FALSE。在不使用任何參數(shù)的情況下,它只會(huì)對列應(yīng)用或刪除篩選圖標(biāo)。Sub FilterRows() Worksheets('Data').Range('A1').AutoFilterEnd Sub上面的代碼簡單地將AutoFilter方法應(yīng)用于列(或者,如果已經(jīng)應(yīng)用了自動(dòng)篩選,則將之刪除)。這只是意味著,如果在列標(biāo)題中看不到篩選圖標(biāo),則在執(zhí)行上述代碼后,將可以看到它,如果執(zhí)行代碼前可以看到它,則執(zhí)行代碼后它將被刪除。示例:基于文本條件篩選數(shù)據(jù)數(shù)據(jù)集如下圖2所示,想要基于“項(xiàng)目”列篩選數(shù)據(jù)。
圖2下面的代碼篩選項(xiàng)目為“打印機(jī)”的所有行。Sub FilterRows1() Worksheets('Sheet1').Range('A1').AutoFilter Field:=2, Criteria1:='打印機(jī)'End Sub上面的代碼引用了工作表Sheet1,同時(shí)引用了單元格A1(數(shù)據(jù)集中的一個(gè)單元格)。注意,這里使用了Field:=2,因?yàn)椤绊?xiàng)目”列是數(shù)據(jù)集中從左起的第二列。示例:同一列中多個(gè)條件(AND/OR)仍然使用上圖2所示的數(shù)據(jù)集,這次篩選“項(xiàng)目”列中“打印機(jī)”或者“空調(diào)”的所有數(shù)據(jù)。代碼如下:Sub FilterRows2() Worksheets('Sheet1').Range('A1').AutoFilter Field:=2, _ Criteria1:='打印機(jī)', _ Operator:=xlOr, _ Criteria2:='空調(diào)'End Sub注意,代碼中使用了xlOr運(yùn)算符,告訴VBA篩選滿足兩個(gè)條件中任意一個(gè)的數(shù)據(jù)。同樣,也可以使用AND條件。例如,如果想要篩選數(shù)量大于10但小于20的所有記錄,可以使用下面的代碼:Sub FilterRowsAnd() Worksheets('Sheet1').Range('A1').AutoFilter Field:=4, _ Criteria1:='>10', _ Operator:=xlAnd, _ Criteria2:='<20'End Sub示例:不同列中多個(gè)條件數(shù)據(jù)集同上。如果想要篩選“項(xiàng)目”列中是“打印機(jī)”且銷售員是“李四”的所有記錄,使用下面的代碼:Sub FilterRows3() With Worksheets('Sheet1').Range('A1') .AutoFilter Field:=2, Criteria1:='打印機(jī)' .AutoFilter Field:=3, Criteria1:='李四' End WithEnd Sub
文章中所使用的示例數(shù)據(jù)和代碼可到知識(shí)星球App完美Excel社群下載。
聯(lián)系客服