电竞比分网-中国电竞赛事及体育赛事平台

分享

VBA用Filter精確匹配篩選或剔除數(shù)組元素

 莫憐飄逸 2023-11-18 發(fā)布于廣東

VBA想要對一個數(shù)組篩選或剔除其中某些指定的數(shù)組元素時,可以使用Filter函數(shù)。

比如想要剔除一維數(shù)組arr【"番茄", "香蕉", "番茄", "提子"】其中所有的“番茄”數(shù)組元素,可以使用arr=VBA.Filter(arr, "番茄", False),得到的數(shù)組就是【"香蕉", "提子"】。

但是如果數(shù)組里含有“小番茄”數(shù)組元素,也是就數(shù)組是arr【"番茄", "香蕉", "小番茄", "提子"】時,使用arr=VBA.Filter(arr, "番茄", False),得到的結果就不是【"香蕉", "小番茄", "提子"】,而還是【"香蕉", "提子"】,也就是以上Filter函數(shù)會把“番茄”和“小番茄”兩種數(shù)組元素都剔除了。

這是因為Filter函數(shù)的篩選是非精確查找,類似like,只要篩選的數(shù)組元素里含有“番茄”兩字,那該數(shù)組元素就會被剔除,也就是Filter函數(shù)只能進行模糊篩選,不能進行精準匹配。

如果想要用Filter函數(shù)實現(xiàn)完全匹配來精準剔除,可以借助輔助字符給數(shù)組元素加“保護”,比如以下代碼:

Sub Filter精確匹配篩選與剔除數(shù)組元素()
arr = Array("番茄", "香蕉", "小番茄", "西瓜", "番茄", "提子")
element = "番茄" '要剔除的數(shù)組元素名
aa = "@" '第一種特殊字符【該特殊字符必須是在數(shù)組元素中沒有的符號】
bb = "#" '第二種特殊字符【該特殊字符必須是在數(shù)組元素中沒有的符號】
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ù)組剔除所有名稱為“#番茄#”的數(shù)組元素

arr = Split(Replace(Join(arr, aa), "#", ""), aa) '剔除所有數(shù)組元素中的“#”
MsgBox Join(arr, ",")    '用“,”串聯(lián)數(shù)組所有元素查看結果
End Sub

以上代碼的原理是給所有數(shù)組元素前后都加上特殊字符“#”后,再使用Filter函數(shù)剔除名稱為“#番茄#”的數(shù)組元素,最后再對所有數(shù)組元素撤銷前面添加的特殊字符恢復原來的名稱(該去除數(shù)組元素中特殊字符的原理詳見我的文章【VBA去除數(shù)組元素中的特定字符串】)。在剔除過程中,原本的數(shù)組元素“小番茄”,就會因為被套上保護變成“#小番茄#”,與“#番茄#”不同而不會被Filter函數(shù)去除。

需要注意的是,選擇的兩種特殊字符必須是在數(shù)組元素中沒有出現(xiàn)的符號。

以上Filter精確匹配剔除數(shù)組元素的方法同理也可用在Filter精確匹配篩選上。

以上內容對您有幫助可以分享或轉藏,避免以后找不到。想要了解更多VBA相關知識,歡迎到http://moqingyan.360doc.com我的個人圖書館查看。

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多