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