在Excel中连接3d范围

如何修改这个UDF以适应多张纸的三维范围?

Function ConcatenateRange(ByVal cell_range As range, _ Optional ByVal seperator As String) As String Dim cell As range Dim newString As String Dim cellArray As Variant Dim i As Long, j As Long cellArray = cell_range.Value For i = 1 To UBound(cellArray, 1) For j = 1 To UBound(cellArray, 2) If Len(cellArray(i, j)) <> 0 Then newString = newString & (seperator & cellArray(i, j)) End If Next Next If Len(newString) <> 0 Then newString = Right$(newString, (Len(newString) - Len(seperator))) End If ConcatenateRange = newString End Function 

这工作:)

 =ConcatenateRange(C4:C16) 

但是这个不是:(

 =ConcatenateRange(sheet1:sheet5!B1) 

这是一个将覆盖多张表的版本,但由于它使用一个stringvariables作为input,它将会有潜在的波动性问题:

 Option Explicit Function ConcatenateRange(ByVal cell_string As String, _ Optional ByVal separator As String) As String Application.Volatile Dim newString As String Dim ary1 As Variant, ary2 As Variant Dim cell_range As Range Dim cellArray As Variant Dim i As Long, J As Long, K As Long Dim sh As Worksheet ConcatenateRange = "" Dim sheet_col As Collection Set sheet_col = New Collection If InStr(cell_string, "!") > 0 Then ary1 = Split(cell_string, "!") If InStr(ary1(LBound(ary1)), ":") > 0 Then ary2 = Split(ary1(LBound(ary1)), ":") For i = LBound(ary2) To UBound(ary2) sheet_col.Add Sheets(ary2(i)) Next i Else sheet_col.Add Sheets(ary1(LBound(ary1))) End If Else sheet_col.Add Sheets(Application.Caller.Parent.Name) ReDim ary1(1 To 1) ary1(1) = cell_string End If For K = 1 To sheet_col.Count Set sh = sheet_col(K) Set cell_range = sh.Range(ary1(UBound(ary1))) If cell_range.Count = 1 Then ReDim cellArray(1 To 1, 1 To 1) cellArray(1, 1) = cell_range.Value Else cellArray = cell_range.Value End If For i = 1 To UBound(cellArray, 1) For J = 1 To UBound(cellArray, 2) If Len(cellArray(i, J)) <> 0 Then newString = newString & (separator & cellArray(i, J)) End If Next Next If Len(newString) <> 0 Then newString = Right$(newString, (Len(newString) - Len(separator))) End If ConcatenateRange = ConcatenateRange & newString Next K End Function 

应该使用像这样的语法:

 =ConcatenateRange("A1:E1",".") =ConcatenateRange("Sheet1!A1:E1",".") =ConcatenateRange("Sheet2!A1:E1",".") =ConcatenateRange("Sheet2!A1:E1",".") =ConcatenateRange("Sheet1:Sheet2!A1",".")