VBA巧妙处理字符串连接

161 篇文章 16 订阅
55 篇文章 4 订阅

字符串连接是经常需要用到的功能,在VBA代码中可以使用+也可以使用&运算符,似乎是简单的不能再简单的功能,但是实际使用过程中也是有一些技巧的。
实例:如下数据中提取张三的订单编号,并使用半角逗号连接。
在这里插入图片描述
示例代码如下。

Sub demo1()
    Dim vntArr, i, strMsg
    vntArr = [a1].CurrentRegion.Value
    For i = 2 To UBound(vntArr)
        If vntArr(i, 1) = "张三" Then
            If Len(strMsg) = 0 Then
                strMsg = vntArr(i, 2)
            Else
                strMsg = strMsg & "," & vntArr(i, 2)
            End If
        End If
    Next
    Debug.Print strMsg
End Sub

【代码解析】
第3行代码将数据加载到数组中。
第4~12行代码从第2行开始循环处理数据。
第5行代码代码根据第一列判断姓名是否为“张三”。
如果strMsg为空,说明是定位到的第一个符合条件的记录,第7行代码直接将订单编号保存到strMsg变量。
如果strMsg不为空,第9行代码将订单编号保存到strMsg变量,并添加逗号作为分隔符。
第13行代码在立即窗口中输出全部订单号,如下图所示。
在这里插入图片描述
整个代码过程并不复杂,第6~10行需要对于第一个订单编号做特殊处理,所以代码行数显得比较多。


其实,可以用变通的思路来处理这个问题,示例代码如下。

Sub demo2()
    Dim vntArr, i, strMsg
    vntArr = [a1].CurrentRegion.Value
    For i = 2 To UBound(vntArr)
        If vntArr(i, 1) = "张三" Then strMsg = strMsg & "," & vntArr(i, 2)
    Next
    Debug.Print Mid(strMsg, 2)
End Sub

【代码解析】
第5行代码并没有对第一个订单编号做特殊处理,因此循环结束后,strMsg变量的值为,KA12394,SS97826,EDG9999,第7行代码输出结果时,使用Mid函数进行截断,去除多余的第一个逗号。
无论是从代码行数和整个的编程逻辑来说demo2都更简洁。


Join可以实现数组的快速连接,所以使用数组来实现也是可行的。示例代码如下。

Sub demo3()
    Dim vntArr, i, strMsg, vntRes(), n
    vntArr = [a1].CurrentRegion.Value
    n = 0
    For i = 2 To UBound(vntArr)
        If vntArr(i, 1) = "张三" Then
            ReDim Preserve vntRes(n)
            vntRes(n) = vntArr(i, 2)
            n = n + 1
        End If
    Next
    Debug.Print Join(vntRes, ",")
End Sub

【代码解析】
第7行代码重新上面动态数组,并保存已有的数组值。
第8行代码将订单编号保存在数组中。
第12行代码使用Join函数组合数组值,并输出到代码窗口。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值