先来一段惨不忍睹的数据源,敢继续玩下看吗?
不过今天介绍的不是这些方法,我们要有逼格,装逼于无形,用正则去拆分。
1
先看动画效果
见到了效果,是不是要见代码呢?
Sub MySplit()
Dim Str, i%, k%, Rg As Range
Dim InputRg As Range, OutputRg As Range ’定义变量,我就不废话了 input输入 output输出
With CreateObject('VBScript.RegExp')
’建立一个正则对象
Set InputRg = Application.InputBox('输入需要拆分的单元格', , , , , , , 8) ’调用程序那个弹窗,可以选区域
Set OutputRg = Application.InputBox('输入需要输出的位置', , Selection.Address, , , , , 8) ’同上
.IgnoreCase = True ’设定参数,这是忽略大小写,根据自己情况调整
.Pattern = '\d ' ’正则表达式,\d是数字型,也可以[0-9]。正则有随意的一面,又有严格的一面
.Global = True ’是否应用于全局,此外还有时候判断换行是否结束该段匹配的参数等。
k = 0 ’计数的无名小卒,用于累加行号
For Each Rg In InputRg ’循环输入区域的,本段代码针对一列,具体的请自行修改
Set Str = .Execute(Rg) ’正则匹配这个单元格,放到str对象中
For i = 0 To Str.Count – 1 ’循环读取匹配到的值
Cells(OutputRg.Row k, OutputRg.Column i) = Str(i) ’根据输出位置的行列写入表格
Next
k = k 1 ’给无名小卒累加
Next
End With ’装逼完成
End Sub
上图中第二种类型的匹配我们只要更改正则表达式即可:
.Pattern = '[a-z] \d ',.IgnoreCase = True不改动,或者去掉忽略大小写后写.Pattern = '[a-zA-Z] \d '。
图文作者:冥月※辰风(秋名山老司机)
联系客服