欢迎转发和点一下“看”,文末留言互动!

置顶公众号或设为星标及时接收更新不迷路

朋友们好,这里是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 Integer    Dim arr As Variant, brr As Variant, regex As Object, mh As Object, d As Object    Set regex = CreateObject("vbscript.regexp")    arr = Range("A1").CurrentRegion    ReDim brr(1 To UBound(arr), 1 To 5)    With regex        .Pattern = "d+(?=<|$)"        .Global = True    End With    For i = 1 To UBound(arr)        Set mh = regex.Execute(arr(i, 1))        For Each d In mh            k = k + 1            brr(i, k) = d        Next        k = 0    Next    [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 mh        k = k + 1        brr(i, k) = d    Next    k = 0Next

通过一段循环代码,将每个匹配到的数值都录入到数组brr中。

03

VBA代码的另一个写法

完整代码如下:

Sub 拆分数据1()    Dim i As Integer, k As Integer    Dim arr As Variant, brr As Variant, regex As Object, mh As Object, d As Object    Set regex = CreateObject("vbscript.regexp")    arr = Range("A1").CurrentRegion    ReDim brr(1 To UBound(arr), 1 To 5)    With regex        .Pattern = "(d+)(?=<)|(d+)$"        .Global = True    End With    For i = 1 To UBound(arr)        Set mh = regex.Execute(arr(i, 1))        For Each d In mh            k = k + 1            brr(i, k) = d        Next        k = 0    Next    [C13].Resize(UBound(arr), 5= brrEnd Sub

这段代码中的正则表达式是稍有不同的,但最终效果一致。

本期内容练习文件提取方式:

链接: https://pan.baidu.com/s/1d246w-lzRvmUVkkzDd9Oxg?pwd=6ja8 提取码: 6ja8 

好了朋友们,今天和大家分享的内容就是这些了!喜欢我的文章请分享、转发、点赞和收藏吧!如有任何问题可以随时私信我哦!

-END-

长按下方二维码关注EXCEL应用之家

面对EXCEL操作问题时不再迷茫无助

我就知道你“在看”

推荐阅读