连接function改变

单个条目的结果必须是[CAR]而不是0。

CAR是单一入境的例子。 随着单一条目我总是得到0.有多个我得到[汽车;自行车]我有什么要改变得到[汽车]代码:

Function ConcRange(ByRef myRange As Range, Optional ByVal Seperator As String = ";", Optional ByVal Begin As String = "[") Conc = vbNullString Dim rngCell As Range For Each rngCell In myRange If Conc = vbNullString Then If Not rngCell.Value = vbNullString Then Conc = CStr(rngCell.Value) End If Else If Not rngCell.Value = vbNullString Then Conc = Conc & Seperator & CStr(rngCell.Value) ConcRange = "[" & Conc & "]" End If End If Next rngCell End Function 

数组方法比范围循环要快得多

而且,当连接string时,最小化长string的调用,即

=ShortStr & (LongStr and ShortStr2)
比下面join长string的方法要好两倍

=ShortStr & LongStr and ShortStr2

 Function ConcRange(ByRef myRange As Range, Optional ByVal Separator As String = ";") As String Dim lngRow As Long Dim lngCol As Long Dim X If myRange.Cells.Count > 1 Then X = myRange.Value2 For lngRow = 1 To UBound(X, 1) For lngCol = 1 To UBound(X, 2) If Len(X(lngRow, lngCol)) > 0 Then If Len(ConcRange) > 0 Then ConcRange = ConcRange & (Separator & X(lngRow, lngCol)) Else ConcRange = X(lngRow, lngCol) End If Next lngCol Next lngRow Else If Len(myRange.Value2) > 0 Then ConcRange = myRange.Value2 End If End Function 

这可能做你想做的事情:

 Function ConcRange(ByRef myRange As Range, Optional ByVal Seperator As String = ";", Optional ByVal Begin As String = "[") As String If (myRange.Rows.Count * myRange.Columns.Count = 1) Then ConcRange = "[" & myRange.Cells(1,1).Value & "]" End If Conc = vbNullString Dim rngCell As Range For Each rngCell In myRange If Conc = vbNullString Then If Not rngCell.Value = vbNullString Then Conc = CStr(rngCell.Value) End If Else If Not rngCell.Value = vbNullString Then Conc = Conc & Seperator & CStr(rngCell.Value) ConcRange = "[" & Conc & "]" End If End If Next rngCell End Function 

*免责声明:我目前无法访问Excel进行testing。

使用你当前的代码,如果ELSE已经达到,函数只能得到一个返回值。 只有在myRange有多个单元格的myRange

但它应该每次都得到一个返回值:

 Function ConcRange(ByRef myRange As Range, Optional ByVal Seperator As String = ";") As String Dim Conc As String Conc = vbNullString Dim rngCell As Range For Each rngCell In myRange If Conc = vbNullString Then If Not rngCell.Value = vbNullString Then Conc = CStr(rngCell.Value) End If Else If Not rngCell.Value = vbNullString Then Conc = Conc & Seperator & CStr(rngCell.Value) End If End If Next rngCell ConcRange = "[" & Conc & "]" End Function 

提示:缩进代码有助于更好地理解依赖关系。