如何在Excel中将列中的行合并到一个单元格中?
例如
A1:I A2:am A3:a A4:boy
我想把它们全部合并成一个单元格“Iamaboy”
这个例子显示了4个单元格合并到1个单元格中,但是我有很多单元格(超过100个),我不能使用A1 & A2 & A3 & A4
逐个地input它们,我该怎么办?
我向你展示了我的ConcatenateRange VBA函数(感谢Jean的命名build议!)。 它将需要一系列单元格(任何维度,任何方向等)并将它们合并成一个单独的string。 作为可选的第三个参数,您可以添加分隔符(如空格或逗号分隔)。
在这种情况下,你会写这个来使用它:
=ConcatenateRange(A1:A4)
Function ConcatenateRange(ByVal cell_range As range, _ Optional ByVal separator As String) As String Dim newString As String Dim cell As Variant For Each cell in cell_range If Len(cell) <> 0 Then newString = newString & (separator & cell)) End if Next If Len(newString) <> 0 Then newString = Right$(newString, (Len(newString) - Len(separator))) End If ConcatenateRange = newString End Function
如果您不想使用VBA,则可以尝试以下操作:
- 有你的数据在单元格A1:A999(或这样的)
- 将单元格B1设置为“= A1”
- 将单元格B2设置为“= B1&A2”
- 将单元格B2一直复制到B999(例如通过复制B2,select单元格B3:B99并粘贴)
单元格B999现在将包含您正在查找的连接的文本string。
在CONCATENATE
,如果展开它( F9 ),则可以使用TRANSPOSE
,然后删除像这样推荐的括号
=CONCATENATE(TRANSPOSE(B2:B19))
变
=CONCATENATE("Oh ","combining ", "a " ...)
您可能需要添加自己的分隔符,例如创build一个列C并转置该列。
=B1&" " =B2&" " =B3&" "
在简单情况下,您可以使用下一个方法,而不需要您创build函数或将代码复制到多个单元格:
-
在任何单元格中写下一个代码
=Transpose(A1:A9)
A1:A9是你想要合并的单元格。
- 没有离开细胞按
F9
之后,单元格将包含string:
={A1,A2,A3,A4,A5,A6,A7,A8,A9}
资料来源: http : //www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-excel/
更新:一部分可能是不明确的。 没有离开细胞就意味着你的细胞处于编辑模式。 或者,你也可以在单元格编辑器面板中按下F9(通常可以在电子表格上方find它)
使用VBA已有的Join
函数。 VBA函数不会在Excel中公开,所以我将它包装在一个用户定义的函数中,该函数公开了它的function。 最简单的forms是:
Function JoinXL(arr As Variant, Optional delimiter As String = " ") 'arr must be a one-dimensional array. JoinXL = Join(arr, delimiter) End Function
用法示例:
=JoinXL(TRANSPOSE(A1:A4)," ")
作为数组公式input(使用Ctrl – Shift – Enter )。
现在, JoinXL
只接受一维数组作为input。 在Excel中,范围返回二维数组。 在上面的例子中, TRANSPOSE
将4×1二维数组转换成一个4元素的一维数组(这是TRANSPOSE
在用单列二维数组进行馈送时所logging的TRANSPOSE
行为)。
对于一个水平范围,你将不得不做一个双重TRANSPOSE
:
=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1)))
内TRANSPOSE
将1×4二维数组转换成4×1二维数组,然后将外部TRANSPOSE
转换成期望的4元素一维数组。
TRANSPOSE
这种用法是在Excel中将二维数组转换为一维数组的一种众所周知的方法,但看起来很糟糕。 更优雅的解决scheme是将其隐藏在JoinXL
VBA函数中。
对于那些有Excel 2016的人 (我想下一个版本),现在直接使用CONCAT函数,它将取代CONCATENATE函数。
所以在Excel 2016中正确的做法是:
=CONCAT(A1:A4)
这将产生:
我是一个男孩
对于旧版Excel的用户,其他答案是相关的。
对于Mac上的Excel 2011,它是不同的。 我做了三个步骤。
- 在列A中创build一列值
- 在列B中,在第一个单元格的右侧,创build一个使用列值和“,”的连接函数的规则。 例如,假定A1是第一行,则B1的公式是
=B1
。 对于N行的下一行,公式是=Concatenate(",",A2)
。 你最终:
QA ,Sekuli ,testing ,Applitools ,视觉testing ,testing自动化 ,selenium
- 在列C中创build连接所有以前的值的公式。 因为它是添加剂,你会得到所有的结果。 单元格C1的公式是
=B1
。 对于所有其他行到N,公式是=Concatenate(C1,B2)
。 你会得到:
QA,Sekuli QA,Sekuli,testing QA,Sekuli,testing,Applitools QA,Sekuli,testing,Applitools,视觉testing 质量保证,Sekuli,testing,Applitools,视觉testing,testing自动化 质量保证,Sekuli,testing,Applitools,视觉testing,testing自动化,Selenium
列表的最后一个单元格将是你想要的。 这与Windows或Mac上的Excel兼容。
我使用CONCATENATE
方法来获取列的值,并用中间的列将引号括起来,以便快速填充SQL语句的WHERE IN ()
子句。
我总是键入=CONCATENATE("'",B2,"'",",")
,然后select并拖动它,创build=CONCATENATE("'",B3,"'",",")
=CONCATENATE("'",B4,"'",",")
等,然后突出显示整个列,将粘贴复制到纯文本编辑器并根据需要粘贴,从而剥离行分隔。 它可以工作,但是再一次,就像一次交易一样,对于一直需要这个的人来说这不是一个好的解决scheme。