我试图遍历A列中的单元格并找到特定的文本字符串。文本字符串如下:
tag:(1001)[EX==]
tag:(1002)[EX==]
tag:(1003)[EX==]
etc...
我想这样使用通配符:
"tag:(1###)[EX??]"
其中3个###是任意3个数字,而2个是??是任何2个单个字符。
但是,我也希望[EX ??]位于这样的数组中:
ArrTagSuffix = Array("[EX??]", "[IN??]", "[EXLW]")
所以...通配符字符串看起来像这样:
"tag:(1###)" & ArrTagSuffix
此外,我希望“ tag:(1 ###)”中的“ 1”类似于“ i”,这样我就可以像这样对其进行索引:
“ tag :(”&i&“ ###)”&ArrTagSuffix
我的第一个问题是通配符的这种格式似乎不起作用。我的第二个问题围绕着试图弄清楚循环/搜索。
基本上,假设“ i”可以是1到6,并且ArrTagSuffix将具有3个不同的字符串。最终可以有18种不同的“ i”和ArrTagSuffix组合。我想搜索列A ...如果找不到匹配项...不执行任何操作...但是如果找到匹配项...将所有匹配的单元格复制到新的工作表上。但是我需要将其复制到找到的相同单元格中...所以...例如...如果在单元格A23中找到匹配项...则需要将其复制到新工作表的单元格A23中
所以...例如...如果Sheet1 ...列A具有:
Blank cell
Blank cell
tag:(1001)[EX==]
Blank cell
tag:(1002)[EX==]
tag:(1003)[EX==]
Blank cell
tag:(3001)[EX==]
tag:(3002)[EX==]
tag:(3003)[EX==]
tag:(6001)[IN==]
Blank cell
tag:(6002)[IN==]
tag:(6003)[IN==]
tag:(1001)[EXLW]
Blank cell
tag:(1002)[EXLW]
tag:(1003)[EXLW]
程序将找到4个匹配项:
"1" and an "[EX??]"
"3" and an "[EX??]"
"6" and an "[IN??]"
"1" and an "[EXLW]"
所以...它将把列A的匹配项复制到4张新纸上的相应单元格中。
最初,我有一个简单的任务,我只需要找到“标签”一词,并且我的代码可以正常工作:
With ActiveSheet
Set criteriarange = Range("A1:A" & LShtRow)
For Each criteriacell In criteriarange
If Not criteriacell.Value Like "tag:*" Then
criteriacell.ClearContents
End If
Next criteriacell
End With
所以我开始修改它以尝试完成此任务……但是就像我上面说的那样……我什至无法使通配符部分正常工作……更不用说循环了……这里是我的位置:
With ActiveSheet
Set criteriarange = Range("A1:A" & LShtRow)
For Each criteriacell In criteriarange
If Not criteriacell.Value Like "tag:(" & i & "###)" & ArrTagSuffix Then
criteriacell.ClearContents
End If
Next criteriacell
End With
我立即意识到它不知道如何处理“ i”,所以我暂时将“ i”更改为“ 1”,以查看是否有匹配项:
With ActiveSheet
Set criteriarange = Range("A1:A" & LShtRow)
For Each criteriacell In criteriarange
If Not criteriacell.Value Like "tag:(" & "1" & "###)" & ArrTagSuffix Then
criteriacell.ClearContents
End If
Next criteriacell
End With
但是我没有向我表明我的通配符格式不正确。为了真正简化事情,我尝试过:
With ActiveSheet
Set criteriarange = Range("A1:A" & LShtRow)
For Each criteriacell In criteriarange
If Not criteriacell.Value Like "tag:(1###)" & ArrTagSuffix Then
criteriacell.ClearContents
End If
Next criteriacell
End With
仍然无法正常工作,我尝试了以下方法:
With ActiveSheet
Set criteriarange = Range("A1:A" & LShtRow)
For Each criteriacell In criteriarange
If Not criteriacell.Value Like "tag:(1???)" & ArrTagSuffix Then
criteriacell.ClearContents
End If
Next criteriacell
End With
仍然不起作用... by也不起作用,我的意思是即使它们与我正在搜索的格式匹配,它也会清除单元格的内容。
答案 0 :(得分:0)
正如我昨天评论过的,正则表达式是一个很好的工具。
首先,您需要在工具菜单中添加对Microsoft VBScript正则表达式的引用。
然后添加此代码:
Private Sub simpleRegex()
Dim strPattern As String
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
strPattern = "tag:\((\d)\d{3}\)\[(\w{2}.{2})\]"
Set Myrange = ThisWorkbook.Sheets("Sheet1").Range("A1:A18")
With regEx
.Global = True
.IgnoreCase = False
.Pattern = strPattern
End With
If strPattern <> "" Then
For Each c In Myrange
strInput = c.Value
If regEx.Test(strInput) Then
Set matches = regEx.Execute(strInput)
c.Offset(0, 1).Value = matches.Item(0).SubMatches.Item(0)
c.Offset(0, 2).Value = matches.Item(0).SubMatches.Item(1)
End If
Next c
End If
End Sub
该代码将循环通过A1:A18并查找模式,如果匹配,则将输出B列的第一位数字和C列[]
之间的代码。