VBA巧妙处理字符串连接

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

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行代码在立即窗口中输出全部订单号,如下图所示。
VBA巧妙处理字符串连接_第2张图片
整个代码过程并不复杂,第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函数组合数组值,并输出到代码窗口。

你可能感兴趣的:(VBA,Excel,数组,VBA,连接字符,动态数组,Join,字符串)