Excel VBA带子string的自动filter

在我的excel中有多行的D列为:TDM – 02 Bundle Rehoming 5 NE,TDM – 02 Bundle Rehoming 23 NE,IP – 02 Bundle Rehoming 7 NE等请注意,网元的数量大多数是不同的地方。 我想search一个子string在Excel VBA中自动过滤:

sht2.Select sht2.Activate If sht2.FilterMode Then sht2.ShowAllData End If sht2.Range("D1:D" & LastRow).AutoFilter Field:=4, Criteria1:=Array( _ CStr("HYBRID ATM and IP - 02 Bundle Rehoming" & Chr(42)), _ CStr("TDM - 02 Bundle Rehoming" & Chr(42)), _ CStr("IP - 02 Bundle Rehoming" & Chr(42))), Operator:=xlFilterValues 

但是,这不会产生任何结果。 没有生成错误,但结果是空行。
我尝试了各种其他的select,如“混合ATM和IP – 02捆绑Rehoming **”等,但没有任何成功。 有什么办法来自动筛选这些子string有一个variables结束。

正则expression式

正则expression式的Regex101 \d+(?=\s*NE)

D列上的值的编码和E列上的编号,因此您可以筛选列E:

 Dim str As String Dim objMatches As Object lastrow = Cells(Rows.Count, "D").End(xlUp).Row For i = 1 To lastrow str = Cells(i, "D") Set objRegExp = CreateObject("VBScript.RegExp") 'New regexp objRegExp.Pattern = "\d+(?=\s*NE)" objRegExp.Global = True Set objMatches = objRegExp.Execute(str) If objMatches.Count > 0 Then For Each m In objMatches Cells(i, "E") = m.Value Next End If Next i 

记得启用参考

结果

结果

编辑:

我误解了,所以这里是对Regex101和代码的回顾:

 Dim str As String Dim objMatches As Object lastrow = Cells(Rows.Count, "D").End(xlUp).Row For i = 1 To lastrow str = Cells(i, "D") Set objRegExp = CreateObject("VBScript.RegExp") 'New regexp objRegExp.Pattern = "\d+(?=\s*NE)" objRegExp.Global = True Set objMatches = objRegExp.Execute(str) If objMatches.Count > 0 Then k = 5 For Each m In objMatches Cells(i, k) = m.Value k = k + 1 Next End If Next i 

结果

结果编辑

所以你可以为数字过滤其他列。

您可以提供一个“正则expression式”或一个显式值的数组,但不是“正则expression式”的数组。 你可以做的是创build一个循环,find你正在寻找的所有值,并提供这些数组。