加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ExcelVBA正则表达式提取星号后面的数字和公式解法

(2014-05-13 10:22:04)
标签:

excel

vba

正则表达式

教育

分类: ExcelVBA
 

请问,采用什么方法能从存货名称列内,抓取第一个*字号后的数字,因为数据量比较多,逐一排查,工作量大,求一简易可行的方法,望大家给予赐教,谢谢!

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有