字符串连接是经常需要用到的功能,在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函数组合数组值,并输出到代码窗口。