我在一个单元格中有50,000个名称和地址,我想将每个元素提取到单独的单元格中,但是一个特定区域却令人头疼。一些地址字段包含街道地址的两个数字。例如,一个单元格可能包含“ Mr Smith 10 Rillington Place Exeter Devon先生”,这很好,因为我的代码将名称街道城市和县分开了。但是某些单元格包含“ Smith&Sons Ltd. 10&12 High Street Sutton Surrey。
我尝试过.Pattern = "(\d+|\D+|\[d+ & \d+])"
,但与.Pattern = "(\d+|\D+)"
一样
Sub SplitTextNum2()
Dim r As Range, rC As Range
Dim Match, Matches
Dim matchCount As Integer
Columns("E").SpecialCells (xlCellTypeBlanks)
On Error Resume Next
Set r = Range("E1", Range("E50").End(xlDown))
With CreateObject("VBScript.RegExp")
.Pattern = "(\d+|\D+)"
.Global = True
For Each rC In r
Set Matches = .Execute(rC.Value)
For matchCount = 1 To Matches.Count
rC.Offset(, matchCount).Value = Matches(matchCount - 1)
Next
Next rC
End With
End Sub
我的VBA宏将“ 10”“&”“ 12”拆分为单独的单元格。在这种情况下,我希望将“ 10&12”保持在一个单元格中。该代码还需要满足单个街道号码。任何建议都会有很大帮助。
答案 0 :(得分:0)
您可以使用相同的替代方式,但以\d+ & \d+
开头
您可以省略\[
,因为它与文字[
匹配,并且该字符将首先由\D
匹配,而不是数字。
如果您打算通过不转义第一个方括号来创建character class,则该模式将与[d+ &]
相同。
但是alternation不能到达那里,因为所有匹配项都将由匹配数字的\d
或不匹配数字的\D
匹配。
您可以使用:
(\d+ & \d+|\d+|\D+)