VBA快速合并字符串方法

在前几天分享的文章【快速对比数据】中,使用了如下代码,有小朋友问为什么要再第20行代码中使用Trim函数呢?是否可以在构建字符串时直接处理呢?本文将就讲一下VBA中快速连接字符串的几种方法。
在这里插入图片描述
我们使用一个简单的示例,提取1-10中的偶数并输出结果,判断偶数非常简单,程序主框架如下。

Sub Demo()
    Dim i As Integer, msg As String
    For i = 1 To 10
        If Int(i / 2) = (i / 2) Then  '构建字符串msg
    Next
    Debug.Print "偶数:" & msg
End Sub

假设以空格分隔结果。

  • 方法1:最经典的教科书式的用法为:
Sub Demo1()
    Dim i As Integer, msg As String
    For i = 1 To 10
        If Int(i / 2) = (i / 2) Then
            If Len(msg) = 0 Then
                msg = CStr(i)
            Else
                msg = msg & " " & CStr(i)
            End If
        End If
    Next
    Debug.Print "偶数:" & msg
End Sub

【代码解析】
第5行代码判断msg变量是否为空,如果为空则说明是第一个偶数,那么第6行代码直接赋值,否则第8行代码在msg变量之后追加空格和偶数。

  • 方法2:输出时取巧
    对于追求极致,希望代码行数近可能的少的开发者来说,则会采用如下代码,代码行数精简了近一半。
Sub Demo2()
    Dim i As Integer, msg As String
    For i = 1 To 10
        If Int(i / 2) = (i / 2) Then msg = msg & " " & CStr(i)
    Next
    Debug.Print "偶数:" & Trim(msg)
End Sub

【代码解析】
第4行代码构建输出结果时,不再对第一个偶数做特殊处理,这样产生的字符串为" 2 4 6 8 10",第一个数字之前会有一个多余的前导空格,幸运的是VBA中提供了相应函数去除空格,第6行代码中使用Trim函数将可以实现完美输出了,效果和方法1完全相同。

  • 方法3:灵活万能法
    看到这里有的读者可能会有疑问,如果分隔符不是空格,怎么办?VBA中没有去除其他前导字符的函数,再写个自定义函数,有些南辕北辙了吧!
    其实这样的场景实现起来也很简单,例如分隔符改为逗号。
Sub Demo3()
    Dim i As Integer, msg As String
    For i = 1 To 10
        If Int(i / 2) = (i / 2) Then msg = msg & "," & CStr(i)
    Next
    Debug.Print "偶数:" & Mid(msg, 2)
End Sub

【代码解析】
与方法2相比,区别仅仅在于第6行代码,使用Mid函数去除第一个字符(多余的逗号),同样简洁。

  • 方法4:通用扩展法
    有时开发代码时分隔符个数并不确定,那么方法3去除多余的前导字符时,可能就会出问题,只要做一下简单扩建,就可以完美适配这样的场景。
Sub Demo4()
    Dim i As Integer, msg As String
    Const STR_DELI = "||"
    For i = 1 To 10
        If Int(i / 2) = (i / 2) Then msg = msg & STR_DELI & CStr(i)
    Next
    Debug.Print "偶数:" & Mid(msg, Len(STR_DELI)+1)
End Sub

【代码解析】
第3行代码定义分隔符常量,用于模拟任意长度的分隔符(单个或多个字符)。
第7行代码输出时Mid函数的第二个参数使用Len函数获取分隔符的长度,从其之后一位开始截取字符串,就可以得到正确的结果。


同一个问题,解决方法有多种,条条大路通罗马。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值