excel - VBA /如何过滤精确字符串上的数组?
问题描述
正如我的标题一样,我试图根据另一个数组从 VBA 数组中过滤掉特定的字符串。
我的代码看起来像这样:
For Each item In exclusions_list
updated_list = Filter(updated_list, item, False, vbTextCompare)
Next item
我的问题是我只想排除完全匹配,我似乎找不到这样做的方法。
如果我在 excludes_list 中有“how”,我想从 updated_list 中排除“how”,而不是“however”。
如果以前有人问过这个问题,我深表歉意。我找不到明确的答案,我对 VBA 也不是很熟悉。
谢谢 !
解决方案
通过一个非常简单的Replace
函数实现
除了上面的有效解决方案之外,只是为了演示使用简单Replace
函数的另一种方法。此解决方案并不假装是执行排除的最有效方式。
示例代码
Sub Howdy()
' Purpose: exclude exactly matching array items (not case sensitive)
Dim exclusions_list, updated_list, item
exclusions_list = Array("How", "much")
' assign test list (with successive repetitions)
updated_list = Split("Bla bla,How,how,Howdy,However,How,much,much,much,Much,Much,How much,something else", ",")
' Debug.Print UBound(updated_list) + 1 & " items in original list: """ & Join(updated_list, "|") & """"
' execute exclusions
For Each item In exclusions_list
updated_list = modifyArr(updated_list, item) ' call helper function modifyArr()
' Debug.Print UBound(updated_list) + 1 & " items excluding """ & item & """:" & vbTab & """" & _
Join(updated_list, "|") & """"
Next item
End Sub
笔记
不评论Debug.Print
您将在 VBE 即时窗口中获得以下结果的语句:
13 items in original list: "Bla bla|How|how|Howdy|However|How|much|much|much|Much|Much|How much|something else"
10 items excluding "How": "Bla bla|Howdy|However|much|much|much|Much|Much|How much|something else"
5 items excluding "much": "Bla bla|Howdy|However|How much|something else"
辅助函数modifyArr()
请注意,有必要排除字符串的连续重复,因为单个Replace
语句不会执行后续字符串部分中的每个想要的替换。
Function modifyArr(ByVal arr, ByVal item) As Variant
Const C = ",": Dim temp$, sLen$
temp = Replace(C & Join(arr, C) & C, C & item & C, Replace:=C, Compare:=vbTextCompare)
Do While True ' needed to get successive repetitions !
sLen = Len(temp)
temp = Replace(temp, C & item & C, Replace:=C, Compare:=vbTextCompare)
If sLen = Len(temp) Then Exit Do
Loop
' return
modifyArr = Split(Mid$(temp, 2, Len(temp) - 2), C)
End Function
推荐阅读
- json - 如何维护 JSON 对象中值的顺序?
- python - 如何修正图表
- ios - Swift - iOS:在任何特殊字符之前或之后删除字符串中的空格
- python - 从本地子文件夹导入文件
- sql-server - 表的一列(主键)的两行是否有可能具有相同的字符/值和相同的外键(另一列)
- xslt - 在 XSLT 中解析 940 仓库 X12
- javascript - ._ 在 javascript 中是什么?
- javascript - FullCalendar Scheduler 时间线在 rails 视图中不起作用(rails 5.2)
- redux - 我可以省略减速器吗?
- ruby-on-rails - 在 SmartListing Gem 中使用全文搜索进行分组和搜索时出现 PostgreSQL 错误