Excel·VBA分列、字符串拆分

看到一篇博客《VBA,用VBA进行分列(拆分列)的2种方法》,使用VBA对字符串进行拆分

目录

Excel分列功能

vbnet 复制代码
Sub 测试1()
    Range("a:a").TextToColumns other:=True, otherchar:=";"
End Sub

代码运行可以将左边拆分为右边,但分隔符只能有1个

将字符串拆分为二维数组,Split函数

分隔符只能有2个,且分隔符是有顺序的,具体看举例

vbnet 复制代码
Function str_split2d(ByVal source_str$, ByVal delimiter)
    'delimiter为分隔符数组,只能有2个元素;source_str按分隔符拆分为二维数组(数组从1开始计数)
    Dim s1$, s2$, srr, res, result, s, t, i&, j&, max_c&
    If UBound(delimiter) - LBound(delimiter) <> 1 Then Debug.Print "参数错误": Exit Function
    s1 = delimiter(LBound(delimiter)): s2 = delimiter(UBound(delimiter))
    srr = Split(source_str, s1): ReDim res(1 To UBound(srr) - LBound(srr) + 1, 1 To 10 ^ 3)
    For Each s In srr
        temp = Split(s, s2): i = i + 1: j = 0
        For Each t In temp
            j = j + 1: res(i, j) = t
        Next
        If j > max_c Then max_c = j
    Next
    ReDim result(1 To i, 1 To max_c)  '结果数组
    For i = 1 To UBound(res)
        For j = 1 To max_c
            result(i, j) = res(i, j)
        Next
    Next
    str_split2d = result
End Function

举例

vbnet 复制代码
Sub 测试2()
    Dim res
    res = str_split2d([a1], Array(";", ","))
    [d1].Resize(UBound(res), UBound(res, 2)) = res
End Sub

将字符串拆分为一维数组,正则表达式

Split函数虽然能够拆分字符串,但是如果分隔符数量较多,那么就需要不断循环遍历分隔符,对拆分后的字符串继续进行拆分,这显然是比较麻烦的

而正则表达式是处理字符串的强大工具,对于处理多个分隔符,代码较为简单

更多关于正则表达式内容详见,《Excel·VBA自定义正则表达式函数、使用》

vbnet 复制代码
Function 正则拆分字符串(ByVal source_str$, ByVal delimiter$)
    'delimiter为分隔符,source_str按分隔符拆分为一维数组(数组从1开始计数)
    Dim pat$, result, i&, num&
    pat = "[^" & delimiter & "]+"  '正则匹配模式,^非
    With CreateObject("vbscript.regexp")  '正则表达式
        .Global = True
        .Pattern = pat
        Set mhs = .Execute(source_str): num = mhs.Count
        If num = 0 Then 正则拆分字符串 = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Array(source_str))): Exit Function
        ReDim result(1 To num)
        For i = 0 To num - 1
            result(i + 1) = mhs(i).Value
        Next
        正则拆分字符串 = result
    End With
End Function

举例

vbnet 复制代码
Sub 测试3()
    Dim res
    res = 正则拆分字符串([a1], ",;")
    [a3].Resize(UBound(res), 1) = WorksheetFunction.Transpose(res)
    res = 正则拆分字符串([d1], ",;|")
    [d3].Resize(UBound(res), 1) = WorksheetFunction.Transpose(res)
End Sub
相关推荐
办公解码器8 小时前
Excel怎么制作下拉菜单?
excel
左师佑图20 小时前
综合案例:Python 数据处理——从Excel文件到数据分析
开发语言·python·数据分析·excel·pandas
SamDeepThinking1 天前
EasyExcel 流式处理中实现末尾行过滤的技术方案
excel
小白学鸿蒙1 天前
鸿蒙数据库表中的数据如何导出为Excel存到系统下载目录
数据库·excel·harmonyos
CodeCraft Studio1 天前
MPP文件处理组件Aspose.Tasks教程:使用Python在Excel中打开MPP文件
python·ui·excel·csv·mpp·aspose·ms project
Python大数据分析@1 天前
如何用 Python xlwings库自动化操作 Excel?
python·自动化·excel
老师可可1 天前
成绩查询系统如何制作?
经验分享·学习·小程序·excel·学习方法
yanweijie03171 天前
Excel(WPS表格)中多列去重就用Tocol+Unique组合函数
excel·wps
Jackiejin5262 天前
WPS表格选择性粘贴快捷键怎么使用?WPS如何给表格某一行都加上指定数字?
数据分析·excel·wps
yivifu2 天前
Word VBA中的Collapse方法详解
word·vba·collapse