gpt4 book ai didi

regex - 带子字符串的 Excel VBA 自动过滤器

转载 作者:行者123 更新时间:2023-12-04 17:48:36 25 4
gpt4 key购买 nike

我的 excel 中有多行 D 列为:TDM - 02 Bundle Rehoming 5 NE, TDM - 02 Bundle Rehoming 23 NE, IP - 02 Bundle Rehoming 7 NE etc. 请注意网元的数量在大多数地方。我想在 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

但是,这不会产生任何结果。没有生成错误,但结果为空行。
我尝试了各种其他选项,例如“HYBRID ATM and IP - 02 Bundle Rehoming **”等,但没有任何成功。有什么方法可以自动过滤这些具有可变结尾的子字符串。

最佳答案

正则表达式

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

Remember to enable the reference

结果

Result

编辑:

我误解了,所以这里是对 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

结果

Result Edit

因此您可以仅针对数字过滤其他列。

关于regex - 带子字符串的 Excel VBA 自动过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46960980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com