我试图从不同的字符串中提取一个位置随机的子字符串。取代不是固定值,而是“ T”,然后是四个数字,例如T6000。
您可以在此图像中看到许多机器名称,其中大多数包含T号。在几乎所有情况下,T值也都不同。机器名称的列为“ E”。第一个数字(T6000)在E16中,最后一个在E25中。
使用我的代码:
For Ipattern = 16 To NumofMachines + 15 Step 1
TNUMcell = Dsht.Range("E" & Ipattern).Value
'Verify if string contains a Tnum
TNUMLikeBoolean = TNUMcell Like "*T###*"
If TNUMLikeBoolean = True Then
Do Until TNUMdone = True
TNUMchar1 = InStr(TNUMcell, "T") + 1
TNUMcharV = Mid(TNUMcell, TNUMchar1)
TNUMchecknum = IsNumeric(TNUMcharV)
If TNUMchecknum = True Then
Dsht.Range("F" & Ipattern).Value = "T" & Mid(TNUMcell, TNUMchar1, 5)
TNUMdone = True
End If
Loop
Else
Dsht.Range("F" & Ipattern).Value = "NO T"
End If
Next Ipattern
它仅填充“导出”范围(F16:F25)的第一个和最后一个单元格。
我一直在寻找答案。因为我(显然)不是VBA专家。
我在做什么错?为什么不填写其他值?
谢谢, 伍特J
答案 0 :(得分:4)
尝试此代码
Sub Test()
Dim r As Range, i As Long, c As Long
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "T\d{4}"
For Each r In Range("E16", Range("E" & Rows.Count).End(xlUp))
c = 6
If .Test(r.Value) Then
For i = 0 To .Execute(r.Value).Count - 1
Cells(r.Row, c).Value = .Execute(r.Value)(i)
c = c + 1
Next i
End If
Next r
End With
End Sub
答案 1 :(得分:1)
问题出在您的变量TNUMdone
上。
在循环的第一次迭代中将其设置为True
,然后再也不会将其设置为False
,因此Do Until TNUMdone = True
之后的代码不再运行。
在循环开始时,只需将TNUMdone
设置为False
,它应该可以工作:
For Ipattern = 16 To NumofMachines + 15 Step 1
TNUMdone = False
TNUMcell = Dsht.Range("E" & Ipattern).Value
...