http://s11/mw690/001f8HsBzy6IeAIQtjc3a&690
自定义函数:
Public Function 取不规则的文本(rng As Range, i As
Integer)
Dim Mat As
Object
With
CreateObject("Vbscript.Regexp")
.Global = True
'Global属性:查找范围:True全部查找,False只查找第1个,默认False
.MultiLine = True
'匹配多行为True
.IgnoreCase = False
'如果赋值为True不区分大小写,如果赋值为False或者不写,就区分大小写
.Pattern = "([一-龢]+)([A-Za-z] .+)"
'Pattern属性:书写正则表达式,默认为"
Set Mat = .Execute(rng)
'Execute方法:返回匹配成功的结果,是一个对象
If i > Mat(0).SubMatches.Count
Then
取不规则的文本 =
""
Else
取不规则的文本 =
Mat(0).SubMatches(i - 1)
End If
End With
End Function
正则的Sub过程:
Public Sub 取不规则的文本2()
Dim Mat As Object, Arr, Brr,
i As Long
Arr = Range("A5:A" &
Cells(Rows.Count, 1).End(xlUp).Row).Value
ReDim Brr(1 To UBound(Arr), 1
To 2)
With
CreateObject("Vbscript.Regexp")
.Global = True
'Global属性:查找范围:True全部查找,False只查找第1个,默认False
.MultiLine = True
'匹配多行为True
.IgnoreCase = False
'如果赋值为True不区分大小写,如果赋值为False或者不写,就区分大小写
.Pattern = "([一-龢]+)([A-Za-z] .+)"
'Pattern属性:书写正则表达式
For i = 1 To UBound(Arr)
Set Mat =
.Execute(Arr(i, 1))
'Execute方法:返回匹配成功的结果,是一个对象
Brr(i, 1)
= Mat(0).SubMatches(0)
Brr(i, 2)
= Mat(0).SubMatches(1)
Next
End With
Range("C5").Resize(UBound(Arr), 2) = Brr
End Sub
函数公式解法如下:
=LEFT(A5,SEARCHB("?",A5)/2)
=SUBSTITUTE(A5,C5,)
A5开始单元格内容:
东疆港金融A SLX-05(MD)
烟草二期A SLX-05(MD)
烟草二期A SLX-10(MD)
东疆港金融A SLX-13(5)MD
东疆港金融A SLX-1-2(MD)G
东疆港金融A SLX-1-2(MD)
天娇园工地C 护栏 1.2米
天娇园工地C 旗杆
天娇园工地D 双层床
天娇园工地D 花饰大门
天娇园工地D 警卫室
东疆港金融A 120平方电缆线
大港工地A 洒水车
大港工地D 双层床
大港工地D 电闸箱护栏 1.2*2
东疆港金融C 彩板
东疆港金融C 护栏 1.5米
东疆港金融C 集装箱
东疆港金融D 双层床
东疆港金融D 电闸箱护栏 1.2*2
东疆港金融D 电闸箱护栏 1.2*3
普通Sub过程的解法:
Sub 循环配合Like()
Dim Arr, i As Long, j As
Long, Brr
Arr = Range("A5:A" &
Cells(Rows.Count, 1).End(xlUp).Row).Value
ReDim Brr(1 To UBound(Arr), 1
To 2)
For i = 1 To UBound(Arr)
For j = 1 To Len(Arr(i, 1))
If
Mid(Arr(i, 1), j, 1) Like "[A-Za-z]" Then
Brr(i, 1) = Mid(Arr(i, 1), 1,
j - 1)
Brr(i, 2) = Mid(Arr(i, 1),
j)
Exit For
End If
Next
Next
Range("C5").Resize(UBound(Arr), 2) = Brr
End Sub
或:
Sub Test()
Dim Arr, i As Long, j As
Long, Brr
Arr = Range("A5:A" &
Cells(Rows.Count, 1).End(xlUp).Row).Value
ReDim Brr(1 To UBound(Arr), 1
To 2)
For i = 1 To UBound(Arr)
For j = 1 To Len(Arr(i, 1))
If
Mid(Arr(i, 1), j, 1) <= "Z" Then
Brr(i, 1) = Mid(Arr(i, 1), 1,
j - 1)
Brr(i, 2) = Mid(Arr(i, 1),
j)
Exit For
End If
Next
Next
Range("C5").Resize(UBound(Arr), 2) = Brr
End Sub
加载中,请稍候......