VBA之正则表达式(21)-- 组合数据拆分(1/2)

48 篇文章 18 订阅
25 篇文章 1 订阅

实例需求:规格数据保存在A1单元格,其中包含多行数据,每行数据都是有多个字段组合而成,现在需要将数据拆分为C列至H列的数据(假设第2行的标题行已经存在)。

在这里插入图片描述
如果希望高效拆分数据,一般来说都会用到正则,只要正则匹配表达式构建正确,其他的部分基本上就是套路了,没有什么复杂的。

Sub Demo()
    Dim regExp As Object, regExpMHs As Object, mh, smh, res()
    Set regExp = CreateObject("vbscript.regExp")
    regExp.Global = True
    regExp.Pattern = "([一-龟]+)\s+([一-龟]+)\s+(\d+)\*(\d+)\*(\d+)=(\d+)"
    Set regExpMHs = regExp.Execute([a1])
    If regExpMHs.Count > 0 Then
        ReDim res(1 To regExpMHs.Count, 1 To 6)
        r = 1
        For Each mh In regExpMHs
            c = 1
            For Each smh In mh.submatches
                res(r, c) = smh
                c = c + 1
            Next
            r = r + 1
        Next
    End If
    [c3].Resize(r - 1, c - 1).Value = res
    Set smh = Nothing
    Set mh = Nothing
    Set regExpMHs = Nothing
    Set regExp = Nothing
End Sub

【代码解析】
第3行代码创建正则表达式对象。
第5行代码设置匹配模式。

正则表达式说明
([一-龟]+)匹配一个或者多个中文字符,即商品名称为第一个捕获组
\s+匹配一个或者多个空白字符
([一-龟]+)匹配一个或者多个中文字符,即类别为第二个捕获组
(\d+)\*(\d+)\*(\d+)=(\d+)匹配数学表达式中的一个或者多个数字,分别为第3~6个捕获组

第6行代码执行正则匹配。
第7行代码判断是否匹配成功。
第8行代码定义动态数组用于保存结果数据。
第10~17行代码循环遍历匹配对象。
第12~15行代码序号遍历捕获组,第13行代码将数据写入数组。
第19行代码将结果写入工作表中C3单元格为左上角的区域。
第20~23行代码清空对象变量,释放系统资源。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值