我需要在一个单元格的一列中合并多个单元格。
数据存在于A列:
0100
0800
ABCD
LMKQ
.
.
.
以此类推
单元格B2应具有以下值:
'0100','0800','ABCD','LMKQ'...等等
我的代码识别所有数据,但仅填充最后一个单元格中的数据:
Sub concatMyData()
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
Cells(2, "B").Value = "'" & Cells(i, "A").Value & " '" & Cells(i + 1, "A").Value & "'"
Next i
End Sub
答案 0 :(得分:1)
检查:
Sub concatMyData()
Dim first As Boolean
first = True
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Not first Then Cells(2, "B").Value = Cells(2, "B").Value & ", "
Cells(2, "B").Value = Cells(2, "B").Value & "'" & Cells(i, "A").Value & "'"
first = False
Next i
End Sub
答案 1 :(得分:1)
您可以使用一行代码来执行此操作,而不必循环(快得多):
Range("B2").Formula = "'" & join(application.transpose(Range("A2:A" & range("A" & rows.count).end(xlup).row)),"', '") & "'"
我假设您在A1中有一个标头,所以从A2开始,您可以根据需要将其更改为A1。
我注意到您要求对其他答案进行解释,这样:
Egan的代码将遍历A列中的每个单元格,并将其添加到当前在B2单元格中的内容。因此,它基本上将B列中它所在的单元格的值添加到B2中,并且每次循环', '
直到它用完A列中的数据为止。还将'
放在B2上。开始和结束。
我的代码将获取范围并将其转置为数组(数据下降,数组移到一边,所以我们将其转置),然后它将值数组合并为单个字符串。我们使用JOIN
函数进行此操作,并指定', '
作为它应放置在数组的每个元素(定界符)之间的位置。
然后,我们只需在开头和结尾添加一个'
,因为它不会以voila开头,这是一串没有循环的连接值。
他们有效地做同样的事情,我只是一次做而不是一次做。