VBA想要對一個數組篩選或剔除其中某些指定的數組元素時,可以使用Filter函數。 比如想要剔除一維數組arr【"番茄", "香蕉", "番茄", "提子"】其中所有的“番茄”數組元素,可以使用arr=VBA.Filter(arr, "番茄", False),得到的數組就是【"香蕉", "提子"】。 但是如果數組里含有“小番茄”數組元素,也是就數組是arr【"番茄", "香蕉", "小番茄", "提子"】時,使用arr=VBA.Filter(arr, "番茄", False),得到的結果就不是【"香蕉", "小番茄", "提子"】,而還是【"香蕉", "提子"】,也就是以上Filter函數會把“番茄”和“小番茄”兩種數組元素都剔除了。 這是因為Filter函數的篩選是非精確查找,類似like,只要篩選的數組元素里含有“番茄”兩字,那該數組元素就會被剔除,也就是Filter函數只能進行模糊篩選,不能進行精準匹配。 如果想要用Filter函數實現完全匹配來精準剔除,可以借助輔助字符給數組元素加“保護”,比如以下代碼: Sub Filter精確匹配篩選與剔除數組元素() arr = Array("番茄", "香蕉", "小番茄", "西瓜", "番茄", "提子") element = "番茄" '要剔除的數組元素名 aa = "@" '第一種特殊字符【該特殊字符必須是在數組元素中沒有的符號】 bb = "#" '第二種特殊字符【該特殊字符必須是在數組元素中沒有的符號】 merge_string = bb & Join(arr, bb & aa & bb) & bb '所有元素之間放“#@#”,前放“#”,后放“#”,合并成字符串 split_arr = Split(merge_string, aa) '根據“@”拆分成新數組 arr = VBA.Filter(split_arr, bb & element & bb, False) '數組剔除所有名稱為“#番茄#”的數組元素 arr = Split(Replace(Join(arr, aa), "#", ""), aa) '剔除所有數組元素中的“#” MsgBox Join(arr, ",") '用“,”串聯數組所有元素查看結果 End Sub 以上代碼的原理是給所有數組元素前后都加上特殊字符“#”后,再使用Filter函數剔除名稱為“#番茄#”的數組元素,最后再對所有數組元素撤銷前面添加的特殊字符恢復原來的名稱(該去除數組元素中特殊字符的原理詳見我的文章【VBA去除數組元素中的特定字符串】)。在剔除過程中,原本的數組元素“小番茄”,就會因為被套上保護變成“#小番茄#”,與“#番茄#”不同而不會被Filter函數去除。 需要注意的是,選擇的兩種特殊字符必須是在數組元素中沒有出現的符號。 以上Filter精確匹配剔除數組元素的方法同理也可用在Filter精確匹配篩選上。 以上內容對您有幫助可以分享或轉藏,避免以后找不到。想要了解更多VBA相關知識,歡迎到http://moqingyan.360doc.com我的個人圖書館查看。 |
|