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)
这是我的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)
...我的做法会非常不同...为什么不创建一个类似以下的函数:
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=""在重新循环之前设置即可。
希望这可以帮助