使用vba连接多个范围

use*_*146 7 excel vba concatenation

我希望有人可以帮我解决我的问题.基本上,我有许多范围,我需要独立连接,并将连接范围的值放入不同的单元格.例如,我想:连接范围A1中的值:A10并将结果放入F1然后我想连接范围B1:B10并将结果放入F2然后我想连接范围C1:C10并将结果放入F3等

我试过使用以下宏.然而我卡住了; 宏似乎正在做的是连接范围A1:A10然后将结果放入F1(这就是我想要的).然而,它还将来自第一个连接的信息存储到存储器中,以便当它进行下一个连接时,在单元格F2中,我得到连接的F1和F2的连接结果.

我试过搜索了很多论坛,但由于这是我自己制作的代码,我找不到解决方案,我确信这是一个常见的问题,而且我做错了可能没有正确设置变量.

在此先感谢您的帮助,

Sub concatenate()

    Dim x As String
    Dim Y As String

For m = 2 To 5

    Y = Worksheets("Variables").Cells(m, 5).Value 

    'Above essentially has the range information e.g. a1:a10 in sheet variables

    For Each Cell In Range("" & Y & "") 'i.e. range A1:A10
        If Cell.Value = "" Then GoTo Line1 'this tells the macro to continue until a blank cell is reached
        x = x & Cell.Value & "," 'this provides the concatenated cell value
    Next

Line1:

    ActiveCell.Value = x

    ActiveCell.Offset(1, 0).Select

Next m

End Sub
Run Code Online (Sandbox Code Playgroud)

aev*_*nko 9

这是我的ConcatenateRange.如果您愿意,它允许您添加分隔符.它经过优化处理大范围,因为它通过将数据转储到变量数组中并在VBA中使用它来工作.

你会像这样使用它:

=ConcatenateRange(A1:A10)
Run Code Online (Sandbox Code Playgroud)

代码:

Function ConcatenateRange(ByVal cell_range As range, _
                    Optional ByVal seperator As String) As String

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
Run Code Online (Sandbox Code Playgroud)


Joh*_*tos 4

...我的做法会非常不同...为什么不创建一个类似以下的函数:

Function ConcatMe(Rng As Range) As String

Dim cl As Range

   ConcatMe = ""

   For Each cl In Rng
      ConcatMe = ConcatMe & cl.Text
   Next cl

End Function
Run Code Online (Sandbox Code Playgroud)

然后,例如,设置 F1 =ConcatMe(A1:A10)或,然后编写代码将函数分配给您想要的单元格......

或者,正如 @KazJaw 在他的评论中提到的,只需x=""在重新循环之前设置即可。

希望这可以帮助