首页 > 解决方案 > 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 也不是很熟悉。

谢谢 !

标签: excelvba

解决方案


通过一个非常简单的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

推荐阅读