欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路
朋友们好,这里是EXCEL应用之家,坚持分享EXCEL操作技巧。
今天要和大家分享一道数据拆分题目。题目很简单,一起来看看!
原题目是这样的:
怎么样按要求完成如右侧的结果呢?
01
公式法
在单元格C2中输入下列公式,并向下向右拖曳即可。
=IFERROR(INDEX(FILTERXML("<a><b>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($A2,"<","@"),">","<b>"),"@","</b>")&"</b></a>","a/b"),COLUMN(A1)),"")
海鲜大法我们曾经多次介绍过,这里就不再赘述了。如有任何问题请给我留言吧!
观察一下答案,虽然我们把数值提取出来了,但是和要求的答案还是有一些差异的。
02
VBA代码
完整代码如下:

Sub 拆分数据()Dim i As Integer, k As IntegerDim arr As Variant, brr As Variant, regex As Object, mh As Object, d As ObjectSet regex = CreateObject("vbscript.regexp")arr = Range("A1").CurrentRegionReDim brr(1 To UBound(arr), 1 To 5)With regex.Pattern = "d+(?=<|$)".Global = TrueEnd WithFor i = 1 To UBound(arr)Set mh = regex.Execute(arr(i, 1))For Each d In mhk = k + 1brr(i, k) = dNextk = 0Next[C13].Resize(UBound(arr), 5) = brrEnd Sub
整个过程比较简单,简单说两句。
regex.Pattern = "d+(?=<|$)"
这个是正则表达式。它的含义是,在字符串末尾的数字;或者那些后面跟着符号“<”的数字。
For i = 1 To UBound(arr)Set mh = regex.Execute(arr(i, 1))For Each d In mhk = k + 1brr(i, k) = dNextk = 0Next
通过一段循环代码,将每个匹配到的数值都录入到数组brr中。
03
VBA代码的另一个写法
完整代码如下:
Sub 拆分数据1()Dim i As Integer, k As IntegerDim arr As Variant, brr As Variant, regex As Object, mh As Object, d As ObjectSet regex = CreateObject("vbscript.regexp")arr = Range("A1").CurrentRegionReDim brr(1 To UBound(arr), 1 To 5)With regex.Pattern = "(d+)(?=<)|(d+)$".Global = TrueEnd WithFor i = 1 To UBound(arr)Set mh = regex.Execute(arr(i, 1))For Each d In mhk = k + 1brr(i, k) = dNextk = 0Next[C13].Resize(UBound(arr), 5) = brrEnd Sub
这段代码中的正则表达式是稍有不同的,但最终效果一致。
本期内容练习文件提取方式:
链接: https://pan.baidu.com/s/1d246w-lzRvmUVkkzDd9Oxg?pwd=6ja8 提取码: 6ja8
-END-
长按下方二维码关注EXCEL应用之家
面对EXCEL操作问题时不再迷茫无助
我就知道你“在看”