请问,采用什么方法能从存货名称列内,抓取第一个*字号后的数字,因为数据量比较多,逐一排查,工作量大,求一简易可行的方法,望大家给予赐教,谢谢!
http://s13/mw690/001f8HsBgy6IQ6UwDNO6c&690
公式如下:
=IF(COUNTIF(B2,"*~**"),-LOOKUP(,-MID(B2,FIND("*",B2)+1,ROW($1:$9))),"")
也可用VBA代码实现:
http://s13/mw690/001f8HsBgy6IQ74TKC89c&690
Sub
提取星号后面的数字2()
'分组方法
Dim Arr, i
As Long, Brr, Reg As Object, Mat As Object
Arr =
Range("A1").CurrentRegion.Value
ReDim Brr(1
To UBound(Arr), 1 To 1)
Set Reg =
CreateObject("VBScript.RegExp") '创建正则表达式
With
Reg
For i = 2 To UBound(Arr) '循环数据行
.Global = True
.Pattern = "(\*)(\d+\.{0,1}\d{0,})" '正则表达式
If .Test(Arr(i, 2)) Then
'Set Mat = .Execute(Arr(i, 2))'用来本地窗口查看数据用
Brr(i, 1) = .Execute(Arr(i, 2)).Item(0).SubMatches.Item(1)
'把结果写入到数组Brr
End If
Next
End
With
Range("K1").Resize(UBound(Arr), 1) = Brr '将数据写入单元格
End Sub
也可以用VBA函数Replace进行后期处理
Sub
提取星号后面的数字3()
'借助VBA的替换函数)
Dim Arr, i
As Long, Brr, Reg As Object, Mat As Object
Arr =
Range("A1").CurrentRegion.Value
ReDim Brr(1
To UBound(Arr), 1 To 1)
Set Reg =
CreateObject("VBScript.RegExp") '创建正则表达式
With
Reg
For i = 2 To UBound(Arr) '循环数据行
.Global = True
.Pattern = "(\*\d+\.{0,1}\d{0,})" '正则表达式
If .Test(Arr(i, 2)) Then
'Set Mat = .Execute(Arr(i, 2))'用来本地窗口查看数据用
Brr(i, 1) = VBA.Replace(.Execute(Arr(i, 2)).Item(0).Value, "*", "")
'把结果写入到数组Brr
End If
Next
End
With
Range("K1").Resize(UBound(Arr), 1) = Brr '将数据写入单元格
End Sub
新浪博客:http://weibo.com/u/1139851561
百度空间:http://hi.baidu.com/335081548
腾讯(QQ)微博:http://t.qq.com/huangshifang?preview
更多分享请关注微信号
微信号:Excel335081548 或:
雪山飞狐Excel
喜欢本文,请点击右上角,分享本文。
或扫扫二维码
https://mmbiz.qlogo.cn/mmbiz/iaPxYpQyYlmmiafDo4j9qibWojjjS0ByTSibI8LKNUKnYPXUCMJQBoLAnJ5AnYfZEpZyXg2CkoF08fboHmKSwfe8Wg/0